2011-06-20 4 views
2
my %fruit_colors = ("apple", "red", "banana", "yellow"); 
my @fruits = keys %fruit_colors; 
my @colors = values %fruit_colors; 
print @fruits;   #output is: bananaapple 
print "\n"; 
print @colors;   #output is: yellowred 

Codepadリンク:print @fruits;の出力がbananaappleでいる理由http://codepad.org/I0wrTPSeどのような順序でキー/値が割り当てられていますか?

誰も私を説明してもらえます。私はそれがアップルバナナだろうと思った。私は、%fruit_colorskeysが逆の順序で配列@fruitsに割り当てられていると思います。つまり、最後の要素が最初に割り当てられています。それは...ですか?

同じケースの場合print @colors;赤黄色の代わりに黄ばんだのはなぜですか?

答えて

10

順序は非決定的であり、変更の対象となる可能性があるハッシュアルゴリズムの基本的な実装に依存します。あなたは決して注文に頼るべきではなく、ソートされた結果が必要な場合は、あなた自身のソートを追加する必要があります。

perl documentation here

+0

そんなに短い答えですごく多くの投票があります。私はiOSの質問に答えるのを止め、Perlのものに固執するつもりだと思う。彼らはもっと感謝のようだ!皆さんありがとう!! – Roger

7

perldoc -f keysを見ます。 perldocにはPerlが付属しています。言語を学ぶときには、最初に言語について何かを読んでおくと便利です:

ハッシュのキーは明らかにランダムな順序で返されます。実際の乱数の順番は、Perlの将来のバージョンで変更される可能性がありますが、ハッシュが変更されていないことを前提として、値または各関数が生成する順序と同じ順序であることが保証されます。 Perl 5.8.1以降、セキュリティ上の理由から、Perlの実行が異なる場合でも、順序は異なります(perlsecのアルゴリズムの複雑さの解説を参照してください)。

3

Rogerは、Perlハッシュを使って作業している間に何の順序も仮定することはできないと言っています。そのほかに

ので、あなたの最初の割り当てはのようになります、ハッシュを扱うときfat commasを使用することをお勧めします。

my %fruit_colors = ("apple" => "red", "banana" => "yellow"); 

は20キー/値のペアを持つハッシュを想像 - あなたはどのように対14で知ることができますこれは鍵であり、どちらが値ですか?

関連する問題