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

标签 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

如果迭代器不打算使用相同的顺序,这将不起作用。我不关心实际顺序是什么,我只需要两个 .each_with_index 迭代器使用相同的顺序。

我假设它是一个数组的一个属性,它有一个固定的顺序,我只是偏执地认为迭代器不会使用那个顺序......

最佳答案

这取决于您正在操作的特定 Enumerable 对象。

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

一个有趣的旁注:即使 Hash 也会以相同的顺序返回对象,如果散列在 each 调用之间没有改变的话。虽然许多对象都有这种行为,但依赖这种微妙可能不是一个好主意。

所以,不。通用的 each 不会总是以相同的顺序返回对象。

附言Ruby 1.9 的哈希现在实际上是有序的 http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash

关于ruby - ruby 中的 .each 迭代器是否保证每次都对相同的元素给出相同的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590152/

相关文章:

rust - Rust-多次调用迭代器方法

ruby-on-rails - 如何在 Ruby 中并行递归下载 FTP 文件夹?

php - 我在哪里可以找到关于 PHP、Ruby 和 Python 的讨论?

ruby-on-rails - 测试时我应该在 Factory girl 中 stub 模型还是在规范文件中 stub ?

Python:用索引展平嵌套列表

c++ - 如何跟踪 C++ vector 上的当前和上一个迭代器?

ruby - Gemfile `Bundler cannot continue` 意外 ':' 错误 [Ruby]

java - LinkedList 中重复错误

ios - 数组 : Swift and IOS

arrays - 如何显示垂直堆叠的数组中的字符串?