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
(而不是-1
或1
), #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']]
数字不稳定