ruby中的.each迭代器是否保证每次对相同的元素给出相同的顺序?
我正在用一个“a”列表做类似的事情: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.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故意以不可预测的方式遍历集合。我想我关心的是迭代器可能(出于某种原因)改变顺序……当你说“列表”时,你是指“数组”,还是也可以指“集”?在这种情况下,它是一个数组。不过我也有几套。我想我在想,每一个都意味着一个顺序,但假设只有一个有序的集合是有序的,这更有意义……对于统计测试来说,随机遍历可枚举项也是有用的。。。