我的哈希陣列是這樣的:
我有一個哈希陣列。
[{"1"/span>=>{: name=>"Miss Sneaky", :race_no=>"2", : drawn_box=>"2"}}, {"1"=>{: name=>"Renny's Diggin'", :race_no=>"2", : drawn_box=>"3"}, {"3"=> {: name=>"Fernando Hill", :race_no=>"2",: drawn_box=>"4"}, {"2"=> {: name=>"Timely Fashion", :race_no=>"2", : drawn_box=>"6"}, {"1"=> {: name=>"Federal Fletch", :race_no=>"2", : drawn_box=>"9"}, {"2"=> {: name=>"Awesome Buddy", : race_no=>"4", :drawn_box=>"3"}, {"7"=>。 name=>"Zipping Annabel", :race_no=>"4", : drawn_box=>"4"}, {"4"=> {: name=>"Kylie Keeping", :race_no=>"4", : drawn_box=>"8"}, {"5"=> {: name=>"Stent", :race_no=>"4", : drawn_box=>"1"}, {"5"=>{:name=>"Jabeni", : race_no=>"4", :drawn_box=>"2"}}, {"11"=>{。 name=>"Barsandi", : race_no=>"4", :drawn_box=>"6"}, {"1"=>: name=>"Little Prayer", : race_no=>"6", :drawn_box=>"2"}}, {"2"=>{。 name=>"Charming Spirit", : race_no=>"6", :drawn_box=>"7"}, {"4"=>。 name=>"Cawbourne Cooper", : race_no=>"6", :drawn_box=>"10"}, {"2"=>: name=>"Lagoon Alaska", : race_no=>"6", :drawn_box=>"4"}, {"1"=>: name=>"Bella N19", : race_no=>"6", :drawn_box=>"5"}, {"4"=>。 name=>"Annie Rocks", :race_no=>"6",: drawn_box=>"9"}, {"1"=> {: name=>"Regent Tree", :race_no=>"8", 。 drawn_box=>"2"}}, {"1"=>{: name=>"Laughing Boy", :race_no=>"8", : drawn_box=>"7"}, {"2"=>{:name=>"笑臉", 。 race_no=>"8", :drawn_box=>"8"}, {"1"=>。 name=>"Sentosa Doll", :race_no=>"8", : drawn_box=>"9"}, {"1"=> {: name=>"propagandist", :race_no=>"8", : drawn_box=>"10"}, {"2"=> {: name=>"Sakeyna", :race_no=>"3", : drawn_box=>"7"}, {"2"=>{:name=>"King Kinloch", 。 race_no=>"3", :drawn_box=>"8"}, {"2"=>: name=>"Zipping Sherman", : race_no=>"3", :drawn_box=>"10"}}, {"3"=>: name=>"Hard Case Watson", : race_no=>"3", :drawn_box=>"1"}, {"3"=>{: name=>"Star Connie", : race_no=>"3", :drawn_box=>"2"}}, {"4"=>{。 name=>"Ultimate Display", : race_no=>"3", :drawn_box=>"3"}}, {"5"=>{。 name=>"Miss Milwaukee", : race_no=>"3", :drawn_box=>"5"}}, {"7"=>{。 name=>"Duck And Dive", :race_no=>"3", : drawn_box=>"6"}, {"1"=> {: name=>"Sentosa Doll", :race_no=>"3", 。 drawn_box=>"9"}, {"2"=> {: name=>"My Sienna", :race_no=>"5", : drawn_box=>"1"}, {"2"=>{: name=>"Simply Patches", :race_no=>"5", : drawn_box=>"6"}, {"2"=> {: name=>"Sooky Lala", : race_no=>"5", :drawn_box=>"8"},
{"3"=>{:name=>"Tiggerlong Pink", : race_no=>"5", : drawn_box=>"10"}, {"5"=> {: name=>"Outside World", :race_no=>"5", 。 drawn_box=>"2"}, {"1"=>{:name=>"Go Forward Bruno">, 。 race_no=>"5", :drawn_box=>"3"}}, {"6"=>{: name=>"Zipping Anthea", : race_no=>"5", :drawn_box=>"5"}, {"5"=> {: name=>"Simply Houdini", :race_no=>"5", : drawn_box=>"7"}, {"3"=> {: name=>"Beauty's Girl", :race_no=>"5", : drawn_box=>"9"}, {"3"=> {: name=>"Ziggy Stardust", :race_no=>"7",: drawn_box=>"1"}, {"7"=>{: name=>"Flashing Oscar", :race_no=>"7", : drawn_box=>"2"}}, {"5"=>{: name=>"Kurios Motion", :race_no=>"7", : drawn_box=>"3"}, {"7"=> {: name=>"Kermaro", :race_no=>"7",: drawn_box=>"4"}, {"6"=> {: name=>"Tap Out Lucy", :race_no=>"7", : drawn_box=>"5"}, {"10"=> {: name=>"Zipping Benson", :race_no=>"7",。 drawn_box=>"6"}, {"24"=> {: name=>"Fire Legend", :race_no=>"7", : drawn_box=>"7"}, {"8"=> {: name=>"Dashing Display", :race_no=>"7", : drawn_box=>"8"}, {"2"=> {: name=>"Rattlin' Home", :race_no=>"9", : drawn_box=>"1"}, {"3"=>{: name=>"Byron Breeze", :race_no=>"9", : drawn_box=>"3"}, {"5"=> {: name=>"Shafted", :race_no=>"9",: drawn_box=>"4"}, {"8"=> {: name=>"Eva's Girl", :race_no=>"9", : drawn_box=>"5"}, {"6"=> {: name=>"Blazin' Sophia", :race_no=>"9", : drawn_box=>"6"}, {"7"=> {: name=>"Enjoy Yourself", : race_no=>"9", :drawn_box=>"7"}, {"3"=>。 name=>"General George", : race_no=>"9", :drawn_box=>"8"}, {"2"=>: name=>"Zipping Sherman", : race_no=>"9", :drawn_box=>"9"}, {"1"=>。 name=>"Teeny Tiger", : race_no=>"10", :drawn_box=>"4"}, {"2"=>。 name=>"Tiggerlong Blaze", :race_no=>"10", : drawn_box=>"7"}, {"1"=> {: name=>"propagandist", :race_no=>"10", : drawn_box=>"9"}, {"1"=> {: name=>"Sentosa Doll", :race_no=>"10", : drawn_box=>"10"}, {"1"=> {: name=>"Fascinate Hannah", :race_no=>"10", : drawn_box=>"1"}, {"4"=>{: name=>"Olivia's Chance", :race_no=>"10", : drawn_box=>"2"}}, {"2"=>{: name=>"Prelious Jade", :race_no=>"10", : drawn_box=>"3"}, {"1"=> {: name=>"Still Laughing", : race_no=>"10", :drawn_box=>"5"}}]
想用關鍵的例子來分組。{"1"=> , "2"=> 等等。
我已經試過這樣做了
wins.group_by { |h| h.key.first }.sort.reverse.to_h
我得到的結果是
{"8"=> [{"8"=>{: name=>"Dashing Display", :race_no=>"7", : drawn_box=>"8"}, {"8"=> {: name=>"Eva的女孩", : race_no=>"9", :drawn_box=>"5"}】, "7"=
但是我需要一個類似于
的回應{"8"/span>=> [{: name=>"Dashing Display", :race_no=>"7", : drawn_box=>"8"}, {:name=>"Eva's Girl", : race_no=>"9", :drawn_box=>"5"}], 等等. ..
我如何才能得到預期的回應?
uj5u.com熱心網友回復:
你可以寫你自己的自定義邏輯來實作上述分組。就像下面這樣:
result={}。
input.each do |element|
key = element.key.first
result.merge! (key => (result[key] || [] ) << element[key])
end
結果
然后根據你的要求進行分類。
uj5u.com熱心網友回復:
因此,如果我們把你目前的結果:
result1 = wins.group_by { |h| h.key.first }.sort.reverse.to_h
現在,鍵是字串,如"8",而值是哈希值的串列。
我們在這里要做的是利用這些哈希值串列,對于每一個哈希值,簡單地提取第一個值,因為我們知道它們各自只有一個值。
要做到這一點:
result2 = result1.transform_values do |list_of_hashes|
list_of_hashes.map { |hash| hash.values.first }
end
另一種方法是直接用reduce處理整個事情:
result = wins.reduce({}) do |memo, hash|
key = hash.key.first
memo[key] ||= [] 。
memo[key].push hash.values.first
記憶
end.sort.reverse
或者,基本上是同樣的事情,使用each_with_object:
result = wins.each_with_object({}) do |hash, memo|
key = hash.key.first
memo[key] ||= [] 。
memo[key].push hash.values.first
end.sort.reverse
uj5u.com熱心網友回復:
如果arr是問題的例子中給出的哈希陣列,我們可以寫如下:
f = arr.each_with_object(Hash.new { |h,k| h[k] = [] }) do |g,h|
k,f = g.flatten
h[k] << f
end
當,例如,
g = {"8"=>{:name=>"Dashing Display">, : race_no=>"7", :drawn_box=>"8"}}.
k,f = g.flatten
#=> ["8", {:name=> "Dashing Display", :race_no=> "7", :drawn_box=> "8"}]]
k #=> "8"
f #=> {:name=> "Dashing Display", :race_no=> "7", :drawn_box=> "8"}
參見Hash#flatten。
我假設回傳的哈希中的鍵的順序并不重要。我進一步假設,作為這些鍵的值的陣列中的哈希值的順序也不重要。
這使用了Hash::new的形式,它有一個塊但沒有引數。當h沒有鍵k時,這會導致h[k] = []在h[k] << f被執行之前被立即執行。
例如,我們發現:
f['8]
#=> [{:name=> "Dashing Display", :race_no=> "7", :drawn_box=> "8"},/span>
# {:name=> "Eva's Girl", :race_no=> "9", :drawn_box=> "5"}]/span>
arr的對應元素(哈希值),其鍵值為'8',如下:
arr.select do |h|<
k,_ = h.flatten
k =="8"
end
#=> [{"8"=>{:name=> "Dashing Display", :race_no=> "7", :drawn_box=> "8"},
# {"8"=>{:name=> "Eva's Girl", :race_no=> "9", :drawn_box=> "5"}}]
可以看到f的計算產生了預期的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/323807.html
標籤:
