【发布时间】:2020-01-16 10:23:24
【问题描述】:
我从 2 个相同大小的数组创建了一个哈希。一个数组元素用作索引,另一个用作值。
for (my $ele=2;$ele<=$#array1;ele++) {$hash{$array1[$ele]}=$array2[$ele];}
当我用 Dumper 打印它时,它显示类似于以下内容:
$VAR1={'key1'=>'""',
'key2'=>'"0"',
'key3'=>'"47.55789"',
'key4'=> '""',
'key5'=>'"78.5463"',
'key6'=>'"0"',
'key7'=>'""' };
我需要比较这些值来识别一些键。而且我无法理解我的哈希键指向什么样的值。我试过了,foreach(@array2){ print ref($_);},它没有返回 859 次(两个数组中有 861 个元素。我不想要前 2 个元素)。 looks_like_number($hash{$key}) 失败。而if ref($hash{$key}) eq 'ARRAY' 不是数组。
我是 perl 的新手。一开始我以为,这些值是字符串数组还是本身就是列表的字符串列表?也许?我试图遍历各种可能性,但失败了。它完美地打印了这些值,但我需要比较它们,但我无法达到确切的值。 empty string/0/>50/<50。
任何帮助将不胜感激。
array1 的 Dumper 输出类似于:
$VAR1='abc';
$VAR2='ghy';
$VAR3='njkio';
$VAR4='mkol';
array2 的 Dumper 输出:
$VAR1='""';
$VAR2='"0"';
$VAR3='"47.55789"';
$VAR4='""';
$VAR5='"78.5463"';
$VAR6='"0"';
$VAR7='""';
foreach my $grp(keys %Austin){
foreach my $val ($Austin{$grp}){
if(looks_like_number($val)){print "String is a NUMBER\n";}
else {print "string is Not a number\n";}
}
}
这个循环的打印输出不是每次都是字符串。我试图理解“76.90”的价值。
【问题讨论】:
-
这不可能是您的 Dumper 输出,因为哈希键是唯一的。那个 for 循环看起来也不对。您应该包含您的实际代码,如果需要,复制和粘贴,而不是某种随机的但不完全是您实际在做的事情。但是键和值都是纯标量。
ref返回一个空字符串,因为它们不是引用。 -
请尝试用没有您原始私人数据的实际代码生成一个最小示例。 for looo 看起来不正确,但我无法用您的虚拟代码片段确认
-
请举例说明
@array1和@array2的内容。从 dumper 输出来看,这些值似乎包含在双引号内。如果不显示更多代码,很难说出为什么会发生这种情况 -
@GreenRoad-Dhaka 好的,那么一个简单的解决方案是在将引号插入数组之前删除它们?
-
@GreenRoad-Dhaka 是的,当然你必须自动完成 :) 例如如果
$s = '"abc"'然后删除$s =~ s/^"|"$//g的引号
标签: arrays list perl hash scalar