ruby中的.each迭代器是否保证每次对相同的元素给出相同的顺序?

ruby中的.each迭代器是否保证每次对相同的元素给出相同的顺序?,ruby,arrays,iterator,Ruby,Arrays,Iterator,我正在用一个“a”列表做类似的事情: a.each_with_index |outer, i| a.each_with_index |inner, j| if(j > i) # do some operation with outer and inner end end end 如果迭代器不使用相同的顺序,这将不起作用。我不在乎顺序到底是什么,我只需要两个。每个索引迭代器使用相同的顺序 我假设它是一个数组的一个属性,它有一个固定的顺序,我只是怀疑迭代器

我正在用一个“a”列表做类似的事情:

a.each_with_index |outer, i|
  a.each_with_index |inner, j|
    if(j > i)
      # do some operation with outer and inner
    end
  end
end
如果迭代器不使用相同的顺序,这将不起作用。我不在乎顺序到底是什么,我只需要两个。每个索引迭代器使用相同的顺序


我假设它是一个数组的一个属性,它有一个固定的顺序,我只是怀疑迭代器不会使用这个顺序…

我没有看过你的实际代码,但下面是你的答案:

数组是任何对象的有序整数索引集合


所以,是的,你是偏执狂,但当你在开发时,这肯定是件好事吗?

这取决于你操作的特定
可枚举对象

例如,数组总是以相同的顺序返回元素。但其他可枚举对象不能保证以这种方式运行。一个很好的例子是1.8,7基散列。这就是为什么许多框架(最著名的是ActiveSupport)实现OrderedHash

有趣的一点是:如果在每次调用之间
哈希没有改变,那么即使
哈希
也会以相同的顺序返回对象。虽然许多对象的行为都是这样的,但依赖这种微妙性可能不是一个好主意

因此,不是。通用的
每个
不会总是以相同的顺序返回对象


p.S.Ruby 1.9的散列现在实际上是有序的

根据定义,数组是元素的有序列表。因此,您应该不会有任何问题。

这取决于特定的可枚举项。当然,数组总是以明显的顺序迭代

对于某些人来说,实现一个以不同方式遍历同一集合的
每个
方法将是相当疯狂的,但对这样一个“特性”的唯一实际限制是混合在Enumerable中的类的文档。好吧,在这一点上,以及实现者的理智


我几乎可以想象某种加密API故意以不可预测的方式遍历集合。

我想我关心的是迭代器可能(出于某种原因)改变顺序……当你说“列表”时,你是指“数组”,还是也可以指“集”?在这种情况下,它是一个数组。不过我也有几套。我想我在想,每一个都意味着一个顺序,但假设只有一个有序的集合是有序的,这更有意义……对于统计测试来说,随机遍历可枚举项也是有用的。。。