我知道在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
之间存在任何索引关系吗?
答案 0 :(得分:11)
是。只要散列未更改(插入或删除),keys
,values
和each
将保持相同的顺序:
只要给定的散列未经修改,您就可以依赖键,值和每个散列重复返回相同的顺序。
- 来自
perldoc -f keys
所以你可以安全地复制像:
这样的哈希my %orig = ...;
my %copy;
@copy{keys %orig} = values %orig;
答案 1 :(得分:3)
虽然键和值返回其内容的顺序可以 根据机器和实施而有所不同,你可以指望 事实上,他们都会产生相同的订单。或者, 你可以使用"每个"拉动键和值 同一时间:
while (($key,$value) = each %ENV) {
print "$key=$value\n";
}
使用each的好处是perl不必分配足够的 一次性存储所有键和值,因此效率更高 如果你正在迭代一个大的哈希。