반응형
여러 값으로 루비 정렬?
해시 배열이 있습니다.
a=[{ 'foo'=>0,'bar'=>1 },
{ 'foo'=>0,'bar'=>2 },
... ]
먼저 각 해시의 'foo'로 배열을 정렬 한 다음 'bar'로 정렬하고 싶습니다. Google은 이것이 수행 방법이라고 말합니다.
a.sort_by {|h| [ h['foo'],h['bar'] ]}
그러나 이것은 나에게 ArgumentError "배열과 배열의 비교 실패"를 제공합니다. 이것은 무엇을 의미 하는가?
a.sort { |a, b| [a['foo'], a['bar']] <=> [b['foo'], b['bar']] }
객체 중 하나에서 '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}]
이 예외는 비교에 사용 된 결과 배열에 nil 및 비 nil 값이 모두 포함 된 경우 발생합니다.
이 오류는 키가 불안정하고이를 기준으로 정렬하려고 할 때 나타납니다. 예:
[{'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']]
숫자가 불안정한 곳
어레이와 어레이를 비교하지 못했습니다.
이것은 (적어도 내 경우에는) 배열 요소의 유형이 다르다는 것을 의미합니다. 모든 배열 항목이 동일한 시간 ( Integer
예 :) 인지 확인했을 때 정렬이 작동하기 시작했습니다.
참고 URL : https://stackoverflow.com/questions/4309723/ruby-sort-by-multiple-values
반응형
'IT Share you' 카테고리의 다른 글
Android Dalvik에서 사용할 수있는 프로그래밍 언어는 무엇입니까? (0) | 2020.11.24 |
---|---|
서블릿에서 들어오는 multipart / form-data 매개 변수를 구문 분석하는 편리한 방법 (0) | 2020.11.24 |
GL_QUADS의 나쁜 점은 무엇입니까? (0) | 2020.11.24 |
Chrome 확장 프로그램 : 새 탭에서 링크를 여는 방법은 무엇입니까? (0) | 2020.11.24 |
Model, ModelMap 및 ModelAndView의 차이점은 무엇입니까? (0) | 2020.11.24 |