mydata = {:data => [
{
:first_name = > "abc",
:foo_id = > "21sd",
:roll = > 43
},
{:first_name = > "def",
:foo_id = > "2uf",
:roll = > 81
},
{:first_name = > "xyz",
:foo_id = > "ac32",
:roll = > 2
}
]
}
在 mydata :roll 中有某种损坏的值
我有一个排序的哈希,它的数据为:foo_id => :roll
sorted = {"21sd" => 7, "ac32" => 89, "2uf" => 92}
(即通过 :roll 的升序正确值排序)
我想使用这个“排序”哈希来重新排列“mydata”,并用:roll
“排序”哈希中的正确值覆盖“mydata”中的值。所以最后'mydata'看起来像
mydata = {:data => [
{
:first_name = > "abc",
:foo_id = > "21sd",
:roll = > 7
},
{:first_name = > "xyz",
:foo_id = > "ac32",
:roll = > 89
},
{:first_name = > "def",
:foo_id = > "2uf",
:roll = > 92
}
]
}
UPADTE: :roll 在排序中可能不是唯一的
考虑 mydata 可能有 100,000 个哈希值
我已经使用'sorted'的嵌套循环实现了结果,并且在每次迭代中,从'mydata'中搜索foo_id并更正值并将排序数据存储在新变量中。这是丑陋的。
correct = []
sorted.each {|k, v|
mydata[:data].each {|h| # hate looping here
if h[:foo_id] == k # hate searching here, if i have 100,000 record in 'mydata'
h[:roll] = v
correct << h
end
}
}
mydata = {:data => correct}
如果 mydata 包含大量数据集,这不是最佳解决方案。有人建议一些最佳解决方案吗?