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.0和1.您可能希望事先规范化数字,如下所示:
$counds{ 0+$_ }++ for @array;
Run Code Online (Sandbox Code Playgroud)