我正在尝试将两个数组组合成一个散列,其中一个是键,一个是值。我对此进行了研究,并找到了多种方法来做到这一点,但它们没有正确实现。我的两个数组都有 348 个值,但是当我将它们组合起来时,散列只包含 9 个键值对。我不明白为什么这不起作用。
my %hash;
@hash{@not_split_source_ips} = @source_lengths;
my $counter = @not_split_source_ips;
my $counter2 = @source_lengths;
print "$counter\n";
print "$counter2\n";
my $count = keys %hash;
print scalar(keys %hash);
$counter
和 $counter2
都打印出 348
,就像它们应该的那样,但 $count
仅打印9. 我尝试使用 List::MoreUtils qw( zip );
但得到了相同的结果。
当输出在一起的 9 行时,这些行来自文件的随机部分,甚至不是开头。
@not_split_source_ips contains value like: 192.168.1.1.80
@source_lengths contains packet lengths: 0, 108, etc.
我还只包含了打印语句来检查和显示它如何不起作用,我不打算在我的实际项目中使用它们。
最佳答案
@not_split_source_ips 是否包含 348 个不同的值,或者 348 个可能重复的值?
如果可能存在重复项(这意味着您实际上正在查找到该地址的数据包长度总和),您可能需要如下所示的内容:
my %hash;
%hash{$not_split_source_ips[$_]} += $source_lengths[$_] for 0 .. $#not_split_source_ips;
关于arrays - 将2个数组放入perl中的散列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27261243/