문제

나는 진짜로 좋아하는 이를 처리하기 위없이 원숭이지만 패치 되지 않았을 찾을 수있는 또 다른 옵션은 아직입니다.

I have an array(루비)할 필요가 있는 종류에 의해 여러 조건입니다.내가 사용하는 방법을 알고 정렬 방법 및 사 속에 정렬을 배열을 사용하는 옵션의 종류에 의해 여러 조건입니다.그러나 이 경우에는 내가 필요로 첫 번째 조건을 오름차순으로 정렬하고 두 번째,내림차순으로 정렬.예를 들어:

ordered_list = [[1, 2], [1, 1], [2, 1]]

어떤 방법이 있나요?

편집:단지 실현해 나가 쉽게 비교할 수 없는 첫 번째와 두 번째 값(나는 실제로 작업체 특성에 대한 여기에서).그래서를 위한 간단한 예제는 그것의 더:

ordered_list = [[1, "b"], [1, "a"], [2, "a"]]
도움이 되었습니까?

해결책

는 방법에 대해:


ordered_list = [[1, "b"], [1, "a"], [2, "a"]]
ordered_list.sort! do |a,b|
  [a[0],b[1]] <=> [b[0], a[1]]
end

다른 팁

었 악몽의 시간을 반대하 종류는 특정 특성이나 일반적으로 정렬한다.그냥 참고에 대해 정렬하는 사람들을 위해 함께 와서 이와 혼동해|a,b|블록문입니다.사용할 수 없습니다 {|a,b| a.blah <=> b.blah} 블록 스타일 sort_by!sort_by.그것과 함께 사용해야 합 sort!sort.또한,앞으로 다른 포스터 교환 ab 에서 비교 연산자 <=> 을 역순으로 정렬할 수 있습니다.다음과 같다:

정렬하여 ㅋ 및 크로 일반적으로,그러나 정렬 블루 역순으로 이렇게:

something.sort!{|a,b| [a.blah, b.bleu, a.craw] <=> [b.blah, a.bleu, b.craw]}

그것은 사용하는 것도 가능하 -sort_bysort_by! 회전하 종류에 숫자(마찬가지로 지금까지 내가 알고 있는 그것만 작품에 숫자 그래서 그것을 시도하지 않으로 문자열을 그냥 오류를 죽인 페이지).

a.craw 정수입니다.예를 들어:

something.sort_by!{|a| [a.blah, -a.craw, a.bleu]}

나는 이와 동일한 기본적인 문제,그 해결을 추가하여 this:

class Inverter
  attr_reader :o

  def initialize(o)
    @o = o
  end

  def <=>(other)
    if @o.is && other.o.is
      -(@o <=> other.o)
    else
      @o <=> other.o
    end
  end
end

이는 단순히 반전 <=>함수는 다음을 할 수 있습 같은 것들이:

your_objects.sort_by {|y| [y.prop1,Inverter.new(y.prop2)]}

Enumerable#multisort 은 일반적인 솔루션에 적용할 수 있는 배열의 어떤 크기, 이 아니라,그 사람이 2 개의 항목입니다.인수는 부울 여부를 나타내는 특정 분야로 정렬되어야 내림차순 또는 오름차순(사용법 아래):

items = [
  [3, "Britney"],
  [1, "Corin"],
  [2, "Cody"],
  [5, "Adam"],
  [1, "Sally"],
  [2, "Zack"],
  [5, "Betty"]
]

module Enumerable
  def multisort(*args)
    sort do |a, b|
      i, res = -1, 0
      res = a[i] <=> b[i] until !res.zero? or (i+=1) == a.size
      args[i] == false ? -res : res
    end
  end
end

items.multisort(true, false)
# => [[1, "Sally"], [1, "Corin"], [2, "Zack"], [2, "Cody"], [3, "Britney"], [5, "Betty"], [5, "Adam"]]
items.multisort(false, true)
# => [[5, "Adam"], [5, "Betty"], [3, "Britney"], [2, "Cody"], [2, "Zack"], [1, "Corin"], [1, "Sally"]]

사용했었는데 글렌의 레시피에.피곤의 코드를 복사하 프로젝트에서 프로젝트에,또 다시 나는 그것을 만들하기로 결정했 보석:

http://github.com/dadooda/invert

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top