Рубин Сортировать по нескольким значениям?
у меня есть массив хэшей:
a=[{ 'foo'=>0,'bar'=>1 },
{ 'foo'=>0,'bar'=>2 },
... ]
Я хочу отсортировать массив сначала по каждому хэшу 'foo', а затем по'bar'. Google говорит мне, что это так:
a.sort_by {|h| [ h['foo'],h['bar'] ]}
но это дает мне аргумент "сравнение массива с массивом не удалось". Что это значит?
5 ответов:
вероятно, это означает, что вам не хватает одного из полей " foo " или " bar " в одном из ваших объектов.
сравнение сводится к чему-то вроде
nil <=> 2
, который возвращаетnil
(вместо-1
,0
или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}]
это исключение возникает, когда массив результатов, используемый для сравнения, содержит как нулевые, так и ненулевые значения.
эта ошибка появляется, когда у вас есть нестабильные ключи и пытается Сортировать по ним. Пример:
[{'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']]
где цифра нестабильная