gpt4 book ai didi

ruby-on-rails - 按其他散列中的值对散​​列进行排序 - Ruby on Rails

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:12 24 4
gpt4 key购买 nike

我有一个哈希,其中包含另一个哈希,我需要按如下方式排序:

data = {
"user": {
"name": "John",
"age": "36",
},
"company": "Terminal",
"country": "Canada",
}
{
"user": {
"name": "Mary",
"age": "32",
},
"company": "Brasco",
"country": "Italy",
}

使用这种方式我可以毫无问题地进行排序:

data.sort_by { |a| [a[:company], a[:country]] }

但如果“公司”和“国家”具有相同的值,我需要按第三个选项“名称”进行排序。

案例是我需要在最后使用'reverse'函数(我贴的例子不是真实情况,真实情况太大了。。。哈哈)。

所以结果也是对名称进行反向排序。

data.sort_by { |a| [a['company'], a['country'], a['user']['name']] }.reverse

我需要“公司”和“国家”按 DESC 排序,用户名按 ASC 排序。

最佳答案

data.sort_by { |a| [a['company'], a['country'], a['user']['name']] }

sort_by 接收到一个数组时,它会在前一个元素相等时比较每个元素。

如果您想对 company ASC, country ASC, name ASC 进行排序,然后轻松地将其反转为 company DESC, country DESC, name ASC 您可以这样做:

sorted = data.group_by do |x| 
[x['company'], x['country']]
end.each do |k, v|
v.sort_by! { |x| x[:user][:name] }
end.sort_by(&:first).map(&:last)

这将创建一个数组数组,每个内部数组包含公司/国家对中的所有用户,按名称排序。

现在要获取 ASC 选项,您应该这样做:

sorted.flatten

反之(用户仍然是 ASC)你需要:

sorted.reverse.flatten

关于ruby-on-rails - 按其他散列中的值对散​​列进行排序 - Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663679/

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