gpt4 book ai didi

ruby-on-rails - 如何按值对哈希进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:20 24 4
gpt4 key购买 nike

我试图按值对特定哈希进行排序。我遇到了一种使用方法 sort_by 的方法。但是即使我在散列上调用 sort_by,它也会返回一个数组,即:

a = {}
a[0] = "c"
a[1] = "b"
a[2] = "a"
a.sort_by{|key, value| value}
# => [[2, "a"], [1, "b"], [0, "c"]]

如果我尝试将结果转换为散列,我最终得到的是按键排序的散列,因此 sort_by 的全部目的都丢失了。即:

a = {}
a[0] = "c"
a[1] = "b"
a[2] = "a"
Hash[*a.sort_by{|key, value| value}.flatten]
# => {0=>"c", 1=>"b", 2=>"a"}

有没有一种方法可以按值对散列进行排序,然后以散列的形式返回结果?

我使用的是 1.8.6 ruby

最佳答案

您可以使用 ActiveSupport::OrderedHash对于 Ruby 1.8:

ActiveSupport::OrderedHash implements a hash that preserves insertion order, as in Ruby 1.9

我没有运行 1.8.6,但这应该可以:

a = {}
a[0] = "c"
a[1] = "b"
a[2] = "a"

ordered = ActiveSupport::OrderedHash[*a.sort_by{|k,v| v}.flatten]
ordered.keys
# => [2, 1, 0], this order is guaranteed

正如上面引用的 Ruby 1.9 中的哈希“按照插入相应键的顺序枚举它们的值”,因此只有 Ruby 1.8 才需要这样做。

关于ruby-on-rails - 如何按值对哈希进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com