这是我在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.0
和1
.您可能希望事先对数字进行规范化,如下所示:
$counds{ 0+$_ }++ for @array;
你只是将数组复制到数组引用中。 perl 是根据上下文解释的。
尝试:
@array=@{$_[0]};
print Dumper @array;
my %counts;
map { $counts{$_}++ } @array;
print Dumper(%counts);
编辑:我首先使用了自己的输入,而不是初始变量中的数组引用..建议的取消引用应该修复它。