2014-10-06 33 views
0
%group = ('forest', 'tree', 'crowd', 'person', 'fleet', 'ship'); 

while (($key, $value) = each(%group)) { 
    print "A $value is part of a $key.\n"; 
} 

這是代碼,輸出是這如何在使用鍵值對時獲取perl中每個()函數的輸出?

A person is part of a crowd. 
A tree is part of a forest. 
A ship is part of a fleet. 

爲什麼根據我在陣列中已給定的順序沒有我得到的輸出?

+2

這不是您指定的數組。它是一個hasmap,它沒有順序 - – Jens 2014-10-06 09:42:41

+0

正如Jens指出的那樣,你正在使用一個沒有順序概念的散列。看看[這個線程](http://stackoverflow.com/questions/3638690/iterating-hash-based-on-the-insertion-order)爲可能的解決方案,它使用'Tie :: IxHash'模塊。 – Andrei 2014-10-06 09:44:50

+0

我在考試中有這個問題,我不得不寫輸出..我怎麼知道輸出是這樣給出的,沒有它是一棵樹是森林的一部分,一個人是人羣的一部分。,一艘船是一個艦隊的一部分。 – nadiyah123 2014-10-06 09:48:43

回答

2

你沒有一個數組,你有一個散列。哈希是無序的。如果你想對你的數據施加順序,那麼使用一個數組。

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

my @groups = (
    [ 'forest','tree' ], 
    [ 'crowd','person' ], 
    [ 'fleet','ship' ], 
); 

foreach my $group (@groups) { 
    say "A $group->[1] is part of a $group->[0]."; 
} 
相關問題