-1

次のハッシュがあります。

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のメソッドはありますか?

4

3 に答える 3

1

行が配列ではなくハッシュであるという特殊なケースがあるようです。そのため、値の順序に基づいて各キーの値を再割り当てし、最初にハッシュから配列を作成し、それを並べ替え、それに基づいてハッシュを作成します新しいインデックス 例

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 はハッシュなのですか? 配列で表す方がよい

于 2013-03-29T02:54:37.203 に答える
1
lines.sort_by! {|hash| -hash["b"]}
于 2013-03-29T00:00:58.143 に答える
0

できるよ

lines.sort! { |a, b| b["b"] <=> a["b"] }
于 2013-03-28T23:57:24.793 に答える