Ruby的Hash::each_value{ |val| block }
返回的值的顺序是否以某种方式定义?即对于给定的散列,循环迭代中的值的顺序总是*相同?
我想知道是不是这样,因为散列的键值对不像数组的值那样排序。
给出以下示例:
myhash = { :a => 100, :b => 200, :z => 9, :e => 101 }
myhash.each_value { |val|
puts val
}
Ruby确保它始终*打印
100
200
9
101
奖励问题,以防定义:
订单定义的先决条件是什么?它仅适用于硬编码哈希作为示例吗?
[*]:“总是”应该在每次执行时以及任何使用Ruby 1.9 + 的系统上读作“”。
答案 0 :(得分:6)
在Ruby 1.8中,没有对Hashes进行排序,并且将以您不能依赖的任意顺序返回值。在Ruby 1.9中,基于插入键的时间(首先插入第一个插入等等)来排序哈希。
您在脚注中指出,“'always'应该在每次执行时和在任何具有Ruby 1.9+工作的系统上读作'。”。根据“总是”的定义,答案是“是”;)
来自Ruby 1.8.7 Hash文档:
您可以看到按键或值遍历散列的顺序 任意的,通常不会在插入顺序中。
来自Ruby 1.9.3 Hash文档:
哈希按照插入相应键的顺序枚举其值。
答案 1 :(得分:3)
在Ruby 1.9中,顺序是插入顺序。
大约三年前这个消息时的一些信息: