簡體   English   中英

散列的鍵和值在Perl中是否具有相同的“順序”?

[英]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 %hvalues %h之間存在任何索引關系嗎?

是。 只要散列沒有更改(插入或刪除), keysvalueseach將保持相同的順序:

只要給定的散列未經修改,您可以依賴於鍵,值和每個重復返回相同的順序。

- 來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM