这是我的代码来计算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 :(得分:11)
$_[0]
中有一个数组引用,Data::Dumper
输出
$VAR1 = [ ....
# ^-- array ref
所以当你这样做时
$counts{$_}++ for @array;
您正在对数组ref进行字符串化,后者变为ARRAY(0x180c844)
或其他类型,然后其键会递增。
如何修复:取消引用$_[0]
。将其复制到数组或直接使用它。
@array = @{$_[0]};
或
$counts{$_}++ for @{$_[0]};
您应该注意,在检查唯一编号时,如果看起来不同的数字应被视为相同的数字,则可能会遇到问题,例如: 1.0
和1
。您可能希望事先规范化数字,如下所示:
$counds{ 0+$_ }++ for @array;
答案 1 :(得分:0)
您只是将数组复制到数组引用中.perl是在上下文中解释的。
尝试:
@array=@{$_[0]};
print Dumper @array;
my %counts;
map { $counts{$_}++ } @array;
print Dumper(\%counts);
编辑:我首先使用自己的输入而不是初始变量中的array-ref ..建议的解引用应该修复它。