我想使用一个元素数组作为散列的键,但缺少一些键
I want to use an array of elements as the keys of a hash but some of the keys are missing
my %seen;
@seen{@sender} = ();
my @merged = (@sender, grep{!exists $seen{$_}} @receiver);
my $c1 = @merged;
print $c1, "\n";
@hash{@merged} = ();
my @email = keys %hash;
my $c2 = @email;
print $c2, "\n";
这是我为了标题中的目的而写的部分代码。
c1 打印 1409 而 c2 只打印 493。
我想知道哪里出了问题,将近 1000 个元素丢失了(不在哈希的键中)?
或者,如果我这样做:
foreach (@merged) {
$hash{$_} = ();
}
# @hash{@merged} = ();
my @email = keys %hash;
分配键,它仍然只给了我 493 个键,缺少将近 1000 个其他键。
谢谢。
my %seen;
@seen{@sender} = ();
my @merged = (@sender, grep{!exists $seen{$_}} @receiver);
混合了两种查找唯一值的方法,但都没有做对。要获取唯一值,请将以上内容更改为
my %seen;
@seen{@sender} = ();
@seen{@receiver} = ();
my @merged = keys(%seen);
或
my %seen;
my @merged = grep !$seen{$_}++, @sender, @receiver;
后者保留顺序。
my %seen;
@seen{@sender} = ();
my @merged = (@sender, grep{!exists $seen{$_}} @receiver);
my $c1 = @merged;
print $c1, "\n";
@hash{@merged} = ();
my @email = keys %hash;
my $c2 = @email;
print $c2, "\n";
这是我为了标题中的目的而写的部分代码。
c1 打印 1409 而 c2 只打印 493。 我想知道哪里出了问题,将近 1000 个元素丢失了(不在哈希的键中)?
或者,如果我这样做:
foreach (@merged) {
$hash{$_} = ();
}
# @hash{@merged} = ();
my @email = keys %hash;
分配键,它仍然只给了我 493 个键,缺少将近 1000 个其他键。
谢谢。
my %seen;
@seen{@sender} = ();
my @merged = (@sender, grep{!exists $seen{$_}} @receiver);
混合了两种查找唯一值的方法,但都没有做对。要获取唯一值,请将以上内容更改为
my %seen;
@seen{@sender} = ();
@seen{@receiver} = ();
my @merged = keys(%seen);
或
my %seen;
my @merged = grep !$seen{$_}++, @sender, @receiver;
后者保留顺序。