[英]How can I assign two arrays to a hash in Perl?
我有兩行代碼和兩個大數組(所以不能把它寫成哈希),我想用哈希連接。
例如, $array1[0]
成為鍵, $array2[0]
成為值,依此類推到$array1[150]
, $array2[150]
。
我有什么想法嗎?
您可以在一個作業中完成:
my %hash;
@hash{@array1} = @array2;
這是一個常見的習語。 來自切片上的perldoc perldata :
如果你對為什么在哈希切片而不是'%'上使用'@'感到困惑,那就這樣想吧。 括號的類型(方形或卷曲)決定它是一個數組還是正在查看的哈希。 另一方面,數組或散列上的前導符號('$'或'@')表示您是返回單數值(標量值)還是復數值(列表)。
當我看到其中一個時,我看到拉鏈的心理形象......
use List::MoreUtils qw( zip );
my @a = 'A' .. 'E';
my @b = 1 .. 5;
my %hash = zip @a, @b;
(我試着將此作為對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";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.