【问题标题】:Ruby Hash by default get sorted in ruby 1.8.7Ruby Hash 默认在 ruby​​ 1.8.7 中排序
【发布时间】:2013-09-30 10:42:39
【问题描述】:

我在生产服务器上使用 ruby​​ 1.8.7,我的哈希在分配给变量时会自动排序。在本地机器上它工作正常。

这是从我的生产控制台获取的输出

>> a = {"b" => "a", "a" => "c"}

=> {"a"=>"c", "b"=>"a"}

>> a

=> {"a"=>"c", "b"=>"a"}
>> 

有什么想法吗?如何避免哈希排序?

谢谢

【问题讨论】:

  • 事实上哈希默认是不排序的,而是按照Ruby 1.8.7最方便的顺序进行迭代。这种行为在 1.9+ 中发生了变化,它按照插入哈希的顺序迭代键。您无法更改此设置,但可以在重要的地方解决它(前提是您的要求只是使用插入顺序,而只是使用明确定义的顺序)

标签: ruby hashmap


【解决方案1】:

你不应该/不能。如果您的脚本依赖于某些特定的顺序,那么您很可能希望使用键/值对列表来代替。在 1.8 中使用哈希时,规范中没有定义顺序。使用 1.9 时,它被定义为按插入顺序枚举。

【讨论】:

    【解决方案2】:

    Hash 在 1.8.7 中没有排序,这意味着您不能依赖键值对的顺序。您看到它们按字母数字排序纯属巧合。

    如果您需要知道键/值对的顺序,可以使用ActiveSupport::OrderedHash(或升级到Ruby 1.9+并使用内置的Hash)。

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 2019-06-30
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多