-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.sort_by! {|hash| -hash["b"]}
于 2013-03-29T00:00:58.143 回答
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}}

也就是说,为什么行是哈希?它可以更好地用一个数组来表示

于 2013-03-29T02:54:37.203 回答
0

你可以做

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