我有一系列哈希:
a=[{ 'foo'=>0,'bar'=>1 },
{ 'foo'=>0,'bar'=>2 },
... ]
Run Code Online (Sandbox Code Playgroud)
我想先按每个哈希的'foo'排序数组,然后按'bar'排序.谷歌告诉我这就是它的完成方式:
a.sort_by {|h| [ h['foo'],h['bar'] ]}
Run Code Online (Sandbox Code Playgroud)
但是这给了我ArgumentError"Array与Array的比较失败".这是什么意思?
dj2*_*dj2 65
a.sort { |a, b| [a['foo'], a['bar']] <=> [b['foo'], b['bar']] }
Run Code Online (Sandbox Code Playgroud)
Wil*_*den 22
这可能意味着您错过了其中一个对象中的某个字段'foo'或'bar'.
比较结果就像nil <=> 2是返回nil(代替-1,0或1)并且#sort_by不知道如何处理nil.
试试这个:
a.sort_by {|h| [ h['foo'].to_i, h['bar'].to_i ]}
Run Code Online (Sandbox Code Playgroud)
Phr*_*ogz 12
您发布的内容适用于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}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35503 次 |
| 最近记录: |