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

Mar*_*iya 2 perl hash map count

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

@array=$_[0];

print Dumper @array;

my %counts;

$counts{$_}++ for @array;
print Dumper(\%counts); 
Run Code Online (Sandbox Code Playgroud)

输出是:

$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
        };
Run Code Online (Sandbox Code Playgroud)

为什么哈希数组是空的?以及如何计算uniq值?

TLP*_*TLP 11

你有一个数组引用$_[0],由Data::Dumper输出演示

$VAR1 = [ ....
#       ^-- array ref
Run Code Online (Sandbox Code Playgroud)

所以,当你这样做

$counts{$_}++ for @array;
Run Code Online (Sandbox Code Playgroud)

您正在对数组ref进行字符串化,这将成为ARRAY(0x180c844)或类似的,然后其键增加.

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

@array = @{$_[0]};
Run Code Online (Sandbox Code Playgroud)

要么

$counts{$_}++ for @{$_[0]};
Run Code Online (Sandbox Code Playgroud)

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

$counds{ 0+$_ }++ for @array;
Run Code Online (Sandbox Code Playgroud)