2017-02-14 137 views
0

我是新來的Perl,我希望把這個:Perl數組索引哈希值

$a = ["apple", "orange", "banana"]; 

進入這個:

$b = { "apple" => 0, "orange" => 1, "banana" => 2 }; 

有沒有這樣做,而不是這種迭代的一種優雅的方式並手動分配一個計數器?

回答

4

這是怎麼了,我通常做的:

my $b = {}; 
@$b{@$a} = 0..$#$a; 

雖然不是很習慣使用標量引用的一切;通常你會使用一個數組變量來保存一個數組和一個哈希變量來保存哈希。這將使該數組分配是這樣的:

my @a = ("apple", "orange", "banana"); 

或者,更簡潔,就像這樣:

my @a = qw(apple orange banana); 

然後散列設置是這樣的:

my %b; 
@b{@a} = 0..$#a; 

獲得優勢可以同時分配到多個密鑰中:

my %h; 
@h{'foo','bar'} = ('zoo','wicky'); 

這使得$h{foo}等於'zoo'$h{bar}等於'wicky'

通過將數組放置在左邊的曲線內,您可以按照要分配的哈希鍵的順序獲取該數組的所有元素。範圍表達式0..$#a,其中$#a是數組最後一個元素的索引,擴展到賦值右側的整數0,1,2,3,4,...,$#a的列表。所以每個數組值都被映射到它的索引。