我找到了这段代码:
my %seen = ();
my @unique = grep { ! $seen{ $_ }++ } @t_array;
(通过:如何在 Perl 数组中打印唯一元素?)
但是,我不明白为什么它会起作用。我知道$_
指的是数组中的元素。但是为什么我们需要它++
之后呢?
任何答案将不胜感激。
我找到了这段代码:
my %seen = ();
my @unique = grep { ! $seen{ $_ }++ } @t_array;
(通过:如何在 Perl 数组中打印唯一元素?)
但是,我不明白为什么它会起作用。我知道$_
指的是数组中的元素。但是为什么我们需要它++
之后呢?
任何答案将不胜感激。
$seen{$_}++
增加 的值$seen{$_}
,并计算为原始值。因此,它在第一次看到给定值时评估为零(假),然后每次都评估为正值(真)。第一次看到给定值时为真! $seen{$_}++
,此后为假。
++
在它开始工作之前将 undefined 转换为零,并在完成后返回零。但是无论哪种方式,您实际上都会得到相同的结果,因为 undefined 是假的,就像零一样。my @unique = grep { ! $seen{ $_ }++ } @t_array;
相当于
my @unique = grep {
# have we seen value of $_ yet?
my $not_seen_yet = ! $seen{ $_ };
# increment hash value by 1 for $_ key
$seen{ $_ } += 1;
$not_seen_yet;
} @t_array;
++
是自增运算符:
如果放在变量之前,它们在返回值之前将变量递增或递减,如果放在变量之后,则在返回值后递增或递减