Ruby sort by multiple values?
I have an array of hashes:
a=[{ 'foo'=>0,'bar'=>1 },
{ 'foo'=>0,'bar'=>2 },
... ]
I want to sort the array first by each hash's 'foo', then by 'bar'. Google tells me this is how it's done:
a.sort_by {|h| [ h['foo'],h['bar'] ]}
But this gives me the ArgumentError "comparison of Array with Array failed". What does this mean?
Solution 1:
a.sort { |a, b| [a['foo'], a['bar']] <=> [b['foo'], b['bar']] }
Solution 2:
It probably means you're missing one of the fields 'foo' or 'bar' in one of your objects.
The comparison is coming down to something like nil <=> 2
, which returns nil
(instead of -1
, 0
or 1
) and #sort_by
doesn't know how to handle nil
.
Try this:
a.sort_by {|h| [ h['foo'].to_i, h['bar'].to_i ]}