{ :AA => "foo", :GR => "foo", :BB => "foo" -6ren">
gpt4 book ai didi

ruby-on-rails - 按键对嵌套哈希中的项目进行排序

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

我有一个带有未排序键的嵌套哈希:

given =  {
"lorem" => {
:AA => "foo",
:GR => "foo",
:BB => "foo"
},
"ipsum" => {
:ZZ => "foo",
:GR => "foo",
}
}

我想要完成的是一个带有排序键的散列:

goal =  {
"ipsum" => {
:GR => "foo",
:ZZ => "foo"
},
"lorem" => {
:AA => "foo",
:BB => "foo",
:GR => "foo"
}
}

我已经尝试过 .each 方法和 sort_by

given.each { |topic| topic[:key].sort_by { |k, v| k } }

但我收到一条错误消息:TypeError: no implicit conversion of Symbol into Integer

非常感谢任何帮助!

PS:我注意到 gem pry 输出已经排序。但在 IRB 中并非如此。

最佳答案

您可以使用 group_bytransform_values 来转换每个散列中的值,也可以使用 sort_by 加上 to_h:

given.transform_values { |value| value.sort.to_h }.sort.to_h

# {"ipsum"=>{:GR=>"foo", :ZZ=>"foo"}, "lorem"=>{:AA=>"foo", :BB=>"foo", :GR=>"foo"}}

你得到一个错误,因为当遍历哈希时,你必须使用 block 范围内的局部变量,键和它的值,你只分配一个(主题)并试图获取它的键,这将尝试访问以下 key :

["lorem", {:AA=>"foo", :GR=>"foo", :BB=>"foo"}]

这是不可能的,因为是一个数组。您可以将代码更新为:

given.each do |topic, value|
...
end

但无论如何,您都需要一种方法来存储该主题值的更改或更新和排序版本。

关于ruby-on-rails - 按键对嵌套哈希中的项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324142/

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