我有两个大数组的代码行(所以不能直接写入哈希表),我想将它们与哈希表连接。
例如,$array1 [0]
变为键,$array2 [0]
变为值,一直到 $array1 [150]
,$array2 [150]
。
有什么想法可以实现这个?
my %hash;
@hash{@array1} = @array2;
这是一个常见的习语。从perldoc perldata on slices中可知:
如果你对为什么在哈希切片上使用 '@' 而不是 '%' 感到困惑,可以这样想。方括号(方形或花括号)的类型决定了查看的是数组还是哈希。另一方面,数组或哈希前导符号('$' 或 '@')指示你获取的是单个值(标量)还是多个值(列表)。
当我看到其中之一时,我就会想象一个拉链的图像...
我试着在brian的答案下留言,但是无法正确排版。
你必须小心避免嵌套使用each
。each
在数组上工作时会有一个“全局”迭代器。当它到达末尾时,它会返回false,然后将位置重置为开头。因此,以下代码会导致无限循环。
感谢RJBS在YAPC::NA的演讲中指出了内置迭代器的全局性质。
use strict;
use warnings;
my @array = 'A' .. 'J' ;
while ( my ($index, $value) = each @array){
print "printing ($index, $value) from outer loop\n";
while ( my ($index_in, $value_in) = each @array){
print "printing ($index_in, $value_in) from inner loop\n";
}
}
use List::MoreUtils qw( zip );
my @a = 'A' .. 'E';
my @b = 1 .. 5;
my %hash = zip @a, @b;
zip
函数可以在List::MoreUtils模块中找到。此外,还有一个问题:是否有一种优雅的方法来交错两个列表? - brian d foy