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
键盘链接:http://codepad.org/I0wrTPSe
有人可以解释一下,为什么print @fruits;
的输出是bananaapple。我以为这将是applebanana。我认为散列keys
的{{1}}将以相反的顺序分配给数组%fruit_colors
,即最后一个元素首先被分配。是吗?
与@fruits
相同的情况为什么会变黄而不是redyellow?
答案 0 :(得分:10)
顺序是非确定性的,取决于可能会发生变化的哈希算法的底层实现。您永远不应该依赖订购,如果您需要排序结果,则应该添加自己的排序。
答案 1 :(得分:7)
见perldoc -f keys。 perldoc
附带Perl。在学习这门语言时,至少要先阅读一些关于语言的内容是很有用的:
散列的键以明显随机的顺序返回。实际的随机顺序在未来的Perl版本中可能会发生变化,但保证与值或每个函数产生的顺序相同(假设散列未被修改)。从Perl 5.8.1开始,出于安全原因,即使在不同的Perl运行之间,顺序也可能不同(请参阅perlsec中的算法复杂性攻击)。
答案 2 :(得分:3)
罗杰说,在使用Perl哈希时,没有任何命令可以保证。
除此之外,建议在使用哈希时使用fat commas,因此您的初始分配应如下所示:
my %fruit_colors = ("apple" => "red", "banana" => "yellow");
想象一下,拥有20个键/值对的哈希 - 你怎么知道第14对哪个是键,哪个是值?