我正在使用列表'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
如果迭代器不会使用相同的顺序,这将不起作用。我不关心命令究竟是什么,我只需要两个.each_with_index迭代器来使用相同的顺序。
我认为它是一个数组的属性,它有一个固定的顺序,我只是偏执,迭代器不会使用该顺序......
答案 0 :(得分:15)
这取决于您正在操作的特定Enumerable
对象。
例如,数组将始终以相同的顺序返回元素。但是其他可枚举对象不能保证以这种方式运行。一个很好的例子是1.8,7基础哈希。这就是许多框架(最着名的是ActiveSupport)实现OrderedHash的原因。
一个有趣的旁注:如果在Hash
次调用之间哈希没有更改,则偶数each
将以相同的顺序返回对象。虽然许多物体都是这样的,但依靠这种微妙之处可能并不是一个好主意。
所以,不。通用each
并不总是以相同的顺序返回对象。
P.S。现在实际上已经订购了Ruby 1.9的哈希http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash
答案 1 :(得分:7)
答案 2 :(得分:2)
根据定义,数组是元素的有序列表。所以你应该没有问题。
答案 3 :(得分:1)
这取决于具体的Enumerable。当然,数组总是以明显的顺序迭代。
如果有人实现一个以不同方式遍历同一集合的each
方法,那将是非常疯狂的边缘,但这种“特征”的唯一实际限制将出现在该类的文档中。混合在Enumerable中。那么,在那和实施者的理智。
我几乎可以想象某种加密API会故意以不可预测的方式遍历集合。