2

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

如果已定义,则有额外的问题:定义
订单的先决条件是什么?它是否仅适用于硬编码的哈希作为示例?


[*]:“ always ”在每次执行时以及在任何运行 Ruby 1.9+ 的系统上都应该读作'。

4

2 回答 2

6

在 Ruby 1.8 中,散列是没有顺序的,值会以你不能依赖的任意顺序返回。在 Ruby 1.9 中,哈希是根据插入键的时间排序的(第一个插入首先定位,等等)。

您在脚注中指定“'always' 应被读作'在每次执行时以及在任何运行 Ruby 1.9+ 的系统上'。”。根据“总是”的定义,答案是“是”;)

来自Ruby 1.8.7 哈希文档:

您通过键或值遍历哈希的顺序可能看起来是任意的,并且通常不会在插入顺序中。

来自Ruby 1.9.3 哈希文档:

哈希按照插入相应键的顺序枚举它们的值。

于 2012-06-14T16:44:25.190 回答
3

在 Ruby 1.9 中,顺序是插入顺序。

大约三年前的一些信息,当时这是新闻:

于 2012-06-14T16:43:32.623 回答