我有一系列哈希:
a=[{ 'foo'=>0,'bar'=>1 },
{ 'foo'=>0,'bar'=>2 },
... ]
我想先按每个哈希的“ foo”对数组进行排序,然后再按“ bar”对数组进行排序。Google告诉我这是怎么做的:
a.sort_by {|h| [ h['foo'],h['bar'] ]}
但这给了我ArgumentError“比较数组与数组失败”。这是什么意思?
我有一系列哈希:
a=[{ 'foo'=>0,'bar'=>1 },
{ 'foo'=>0,'bar'=>2 },
... ]
我想先按每个哈希的“ foo”对数组进行排序,然后再按“ bar”对数组进行排序。Google告诉我这是怎么做的:
a.sort_by {|h| [ h['foo'],h['bar'] ]}
但这给了我ArgumentError“比较数组与数组失败”。这是什么意思?
Answers:
a.sort { |a, b| [a['foo'], a['bar']] <=> [b['foo'], b['bar']] }
Enumerable#sort_by(&block)
大致而言sort { |a,b| block.call(a) <=> block.call(b) }
,除非以更有效的方式完成。如果这有效但sort_by
不起作用,则意味着其他问题。
a=[{'foo'=>0,'bar'=>2},{'foo'=>0,'bar'=>1},{'foo'=>2,'bar'=>1},{'foo'=>1,'bar'=>0}]
。
您发布的内容在Ruby 1.8.7中有效:
ruby-1.8.7-p302 > a = [{'foo'=>99,'bar'=>1},{'foo'=>0,'bar'=>2}]
=> [{"foo"=>99, "bar"=>1}, {"foo"=>0, "bar"=>2}]
ruby-1.8.7-p302 > a.sort_by{ |h| [h['foo'],h['bar']] }
=> [{"foo"=>0, "bar"=>2}, {"foo"=>99, "bar"=>1}]
ruby-1.8.7-p302 > a.sort_by{ |h| [h['bar'],h['foo']] }
=> [{"foo"=>99, "bar"=>1}, {"foo"=>0, "bar"=>2}]