gpt4 book ai didi

具有多个键的 Ruby 哈希查找

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:23 25 4
gpt4 key购买 nike

我有两个散列数组 - car_modelcar_cc,如下所示。对于 car_model 中的每个散列,我需要查找 cc 键并将其添加到 car_model

car_model = [
{state: "MH", regno: 5555, model: "alto"},
{state: "MH", regno: 5566, model: "alto"},
{state: "DL", regno: 5555, model: "prius"},
{state: "DL", regno: 5567, model: "nano"}
]

car_cc = [
{state: "MH", regno: 5555, cc: 999},
{state: "MH", regno: 5588, cc: 1800},
{state: "DL", regno: 5555, cc: 1119},
{state: "DL", regno: 5567, cc: nil}
]

现在我使用常规的 .each 循环来查找 car_cc 中的 cc 键并将其添加到 中的每个项目>car_model.

car_model.each do |cm|
car_cc.each do |cc|
if(cm["state"]==cc["state"] && cm["regno"]==cc["regno"])
cm["cc"] = cc["cc"]
break
end
end
end
预期产出
puts car_model
{:state=>"MH", :regno=>5555, :model=>"alto", :cc=>999}
{:state=>"MH", :regno=>5566, :model=>"alto", :cc=>nil}
{:state=>"DL", :regno=>5555, :model=>"prius", :cc=>1119}
{:state=>"DL", :regno=>5567, :model=>"nano", :cc=>nil}
=> nil
irb(main):008:0>

是否有更有效的方式来做到这一点——更快、更像 ruby​​istic 的方式?

最佳答案

一种方法是将 car_cc 转换为具有方便键的哈希:

cc = car_cc.each_with_object({}) { |car, h| h[car.values_at(:state, :regno)] = car[:cc] }

这样您就可以更轻松地执行连接:

car_model.each { |h| h[:cc] = cc[h.values_at(:state, :regno)] }

这假设 :state/:regno 对在 car_cc 中是唯一的,并且您想要修改 car_model。如果你不想修改 car_model 那么你可以说:

car_model_cc = car_model.map { |cm| cm.merge(cc: cc[cm.values_at(:state, :regno)]) }

在添加 :cc 时复制所有内容。


当然,对于这么小的数据集,任何性能差异都将太小而无需担心,如果您的数据集大得多,那么您可能希望将其全部塞入数据库中,让数据库完成繁重的工作。

关于具有多个键的 Ruby 哈希查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645618/

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