![](/img/trans.png)
[英]In Perl, how do I print hash keys in order of their (numerical) values?
[英]Will keys and values of a hash have the same “order” in Perl?
我知道在perl中沒有排序哈希。 我關心的是我是否可以依賴索引關系出現的鍵和值。
說我有這個哈希
my %h = ("a" => 1, "b" => 2, "c" => 3, "d" => 4);
如果我keys %h
,我可能會得到
("b", "a", "d", "c")
我能保證values %h
會以相同的順序出現以匹配鍵嗎? 我可以期待嗎?
(2, 1, 4, 3)
或者不能保證keys %h
和values %h
之間存在任何索引關系嗎?
是。 只要散列沒有更改(插入或刪除), keys
, values
和each
將保持相同的順序:
只要給定的散列未經修改,您可以依賴於鍵,值和每個重復返回相同的順序。
- 來自
perldoc -f keys
所以你可以安全地復制一個哈希,如:
my %orig = ...;
my %copy;
@copy{keys %orig} = values %orig;
雖然鍵和值返回其內容的順序可能因機器和實現而異,但您可以指望它們將生成相同的順序。 或者,您可以使用“each”功能同時拉取鍵和值:
while (($key,$value) = each %ENV) {
print "$key=$value\n";
}
使用each的好處是perl不必一次為所有鍵和值分配足夠的內存,所以如果你遍歷一個大的哈希,它會更有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.