簡體   English   中英

如何根據Ruby中的鍵值對之一對哈希行進行降序排序?

[英]How to sort lines of a hash in descending order according to one of the key-value pairs in Ruby?

我有以下哈希值:

lines[0] = {"a" => dog, "b" => 32, "c" =>555, "d" => 100}
lines[1] = {"a" => cat, "b" => 34, "c" =>554, "d" => 4542}
lines[2] = {"a" => bird, "b" => 31, "c" =>532435, "d" => 23}

我想按降序以“ b”對哈希進行排序,以便最終得到:

lines[0] = {"a" => cat, "b" => 34, "c" =>554, "d" => 4542}
lines[1] = {"a" => dog, "b" => 32, "c" =>555, "d" => 100}
lines[2] = {"a" => bird, "b" => 31, "c" =>532435, "d" => 23}

實現這一目標的最佳方法是什么? Ruby中有沒有一種方法可以幫助您?

lines.sort_by! {|hash| -hash["b"]}

您似乎有一個特殊的情況,即line不是數組而是Hash,因此您想根據值的順序為每個鍵重新分配值,首先要從Hash中創建數組,然后對其進行排序,然后根據Hash創建一個Hash。新索引,例如

lines = {}
lines[0] = {"a" => :dog, "b" => 32, "c" =>555, "d" => 100}
lines[1] = {"a" => :cat, "b" => 34, "c" =>554, "d" => 4542}
lines[2] = {"a" => :bird, "b" => 31, "c" =>532435, "d" => 23}

require 'pp'
pp Hash[lines.map.sort_by {|k,v| -v["b"]}.map.with_index {|v, index| [index, v[1]]}]

輸出為:

{0=>{"a"=>:cat, "b"=>34, "c"=>554, "d"=>4542},
 1=>{"a"=>:dog, "b"=>32, "c"=>555, "d"=>100},
 2=>{"a"=>:bird, "b"=>31, "c"=>532435, "d"=>23}}

也就是說,為什么行是哈希? 最好用數組表示

你可以做

lines.sort! { |a, b| b["b"] <=> a["b"] }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM