计算数组中的 UNIQ 值不起作用



这是我在perl数组中计算Uniq值并将它们放入哈希数组的代码

@array=$_[0];
print Dumper @array;
my %counts;
$counts{$_}++ for @array;
print Dumper(%counts); 

输出为:

$VAR1 = [
          -46,
          '53',
          11,
          '84',
          -2,
          '47',
          -7,
          '72',
          0,
          '14',
          -10,
          '3',
          -46,
          '53',
          11,
          '84',
          -2,
          '47',
          -7,
          '72',
          0,
          '14',
          -10,
          '3'
        ];
$VAR1 = {
          'ARRAY(0x180c844)' => 1
        };

为什么哈希数组为空?为了计算 uniq 值该怎么办?

你在 $_[0] 中有一个数组 ref,这由Data::Dumper输出证明

$VAR1 = [ ....
#       ^-- array ref

所以当你这样做时

$counts{$_}++ for @array;

您正在字符串化数组 ref,它变成 ARRAY(0x180c844) 或类似的东西,然后它的键递增。

解决方法:取消引用$_[0]。将其复制到阵列或直接使用它。

@array = @{$_[0]};

$counts{$_}++ for @{$_[0]};

您应该注意,在检查唯一数字时,如果将看起来不同的数字视为相同,您可能会遇到问题,例如 1.01 .您可能希望事先对数字进行规范化,如下所示:

$counds{ 0+$_ }++ for @array;

你只是将数组复制到数组引用中。 perl 是根据上下文解释的。

尝试:

@array=@{$_[0]};
print Dumper @array;
my %counts;
map { $counts{$_}++ } @array;
print Dumper(%counts); 

编辑:我首先使用了自己的输入,而不是初始变量中的数组引用..建议的取消引用应该修复它。

最新更新