I’m doing something like this with a list ‘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
if the iterator is not going to use the same order, this won’t work. I don’t care what the order actually is, I just need for two .each_with_index iterators to use the same order.
I would assume that it would be a property of an array that it has a fixed order and I’m just being paranoid that the iterator wouldn’t use that order…
This depends on the specific
Enumerableobject you are operating on.Arrays for example will always return elements in the same order. But other enumerable objects are not guaranteed to behave this way. A good example of this is the 1.8,7 base Hash. That is why many frameworks (most notably ActiveSupport) implement an OrderedHash.
One interesting side note: Even
Hashwill return objects in the same order if the hash has not changed betweeneachcalls. While many objects behave this way, relying on this subtlety is probably not a great idea.So, no. The generic
eachwill not always return objects in the same order.P.S. Ruby 1.9’s hashes are now actually ordered http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash