Is the .each iterator in ruby guaranteed to give the same order on the same elements every time?

后端 未结 4 627
臣服心动
臣服心动 2020-12-19 04:52

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         


        
4条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-19 05:33

    This depends on the specific Enumerable object 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 Hash will return objects in the same order if the hash has not changed between each calls. While many objects behave this way, relying on this subtlety is probably not a great idea.

    So, no. The generic each will 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

提交回复
热议问题