我是 perl 的新手,我有一个我正在尝试解决的问题。在我的程序的这个阶段,我将一个文件放入一个数组并创建了一个哈希,其中所有键都是数字,按用户指定的 bin 大小增加,在一个范围内所有键的值都设置为 0。我的目标是遍历数组并找到与我的哈希键匹配的数字,并在匹配时将相应的值加1。为了更容易在数组中查找特定值,数组的每一行将只包含一个感兴趣的数字,并且这个数字总是小数,所以也许我可以使用正则表达式:
=~ m{(\d+\.\d+)}
挑选出感兴趣的数字。找到感兴趣的数字后,我需要将数字四舍五入(在我使用“Math::Round 'nlowmult';”时),以便它可以放入适当的 bin(如果存在),如果bin 不存在,循环需要继续,直到扫描完数组的所有行。
因此,总体目标是在用户指定的范围和增量(bin 大小)内创建一个哈希,该哈希记录了该数组中的值出现的次数。
目前我的代码尝试这样做是(在程序的前面已经调用了 MathRound):
my $msline;
foreach $msline (@msfile) {
chomp $msline;
my ($name, $pnum, $m2c, $charge, $missed, $sequence) = split (" ", $msline);
if ($m2c =~ /[$lowerbound,$upperbound]/) {
nlowmult ($binsize, $m2c);
$hash{$m2c}++;
}
}
注意:数组的每一行包含 6 个字段,感兴趣的数量始终出现在第三个字段“m2c”中。
该程序没有将值向下舍入,也没有向键添加值,它正在创建新键并递增这些键。我也不认为使用 split 是一个好主意,因为一个真正的数组将包含大约 40,000 行。这可能会使哈希填充过程非常缓慢。
我哪里错了?任何人都可以给我任何关于如何解决这个问题的提示吗?如果问题的任何方面需要进一步解释,请告诉我!
先感谢您!