Ruby按多个值sorting?

我有一个哈希数组:

a=[{ 'foo'=>0,'bar'=>1 }, { 'foo'=>0,'bar'=>2 }, ... ] 

我想先sorting数组中的每个散列的'foo',然后'bar'。 谷歌告诉我,这是如何做到的:

 a.sort_by {|h| [ h['foo'],h['bar'] ]} 

但是这给了我ArgumentError“arrays与arrays比较失败”。 这是什么意思?

 a.sort { |a, b| [a['foo'], a['bar']] <=> [b['foo'], b['bar']] } 

这可能意味着你错过了其中一个对象的“foo”或“bar”字段之一。

比较的结果是nil <=> 2 ,返回nil (而不是-11 ), #sort_by不知道如何处理nil

尝试这个:

 a.sort_by {|h| [ h['foo'].to_i, h['bar'].to_i ]} 

你在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}] 

当用于比较的结果数组包含nil和非nil值时,会发生此exception。

这个错误出现在你有不稳定的键并尝试按它们sorting时。 例:

 [{'foo'=>99,'bar'=>1},{'foo'=>0,'bar'=>2, 'qwe' => 7}] a.sort_by{|v| v['qwe']} ArgumentError: comparison of NilClass with 7 failed 

试着做

 a.sort_by{|v| [v['qwe']].select{|k| not k.nil?}} 

但它不适合我的工作

 [v['index'],v['count'],v['digit'],v['value']] 

数字不稳定