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」の値を「sorted」ハッシュからの正しい値でオーバーライドしたいと思います。したがって、最終的に「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に多数のデータセットが含まれている場合、これは最適なソリューションではありません。誰かがいくつかの最適な解決策を提案しますか?