计算数组中的唯一值不起作用

时间:2013-09-21 01:46:45

标签: perl hash map count

这是我的代码来计算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值?

2 个答案:

答案 0 :(得分:11)

$_[0]中有一个数组引用,Data::Dumper输出

证明了这一点
$VAR1 = [ ....
#       ^-- array ref

所以当你这样做时

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

您正在对数组ref进行字符串化,后者变为ARRAY(0x180c844)或其他类型,然后其键会递增。

如何修复:取消引用$_[0]。将其复制到数组或直接使用它。

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

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

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

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

答案 1 :(得分:0)

您只是将数组复制到数组引用中.perl是在上下文中解释的。

尝试:

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

print Dumper @array;

my %counts;

map { $counts{$_}++ } @array;
print Dumper(\%counts); 

编辑:我首先使用自己的输入而不是初始变量中的array-ref ..建议的解引用应该修复它。