2009-09-16 9 views

답변

19

사용 sort_by 다른 sort_by 문

5
레일에서

, 또는 오히려 ActiveSupport와, 또는 루비 1.9에서 sort_lambda을 다시 사용할 수 있습니다 후자와

array.sort_by{|e| e.something}

또는

sort_lambda = lambda{|e| e.something} 
array.sort_by(&sort_lambda) 

(아마도 1.8.7, 확실하지 않음) 새로운 단축키를 사용할 수 있습니다 :

(: 그것은 일종의 키 복잡성에 따라 달라 가능 이익) 부작용 : 그것은 당신의 새로운 키를 기준으로 정렬 할 수 있도록 각 항목에 대한 임시 키 - 값 쌍을 생성하고 저장 sort_by 가능성이 비싼 가지고는
array.sort_by(&:something) 

참고. 이에 대한 자세한 내용은 discussion in the documentation을 참조하십시오.

+0

네, Ruby 1.8.7은 Symbol # to_proc입니다. – Chuck

+0

array.sort_on (: something)도 잘 작동한다면 좋을 것입니다. – tadman

+0

구현하는 것은 간단합니다 :'def sort_on (property) sort_by & property end' – Chuck

5

Eimantas '제안에 모두 +1,하지만 사용자 정의 클래스를 어디에서 나는 종종이 경우에 올라와있다 그 항상 종류의 이러한 방법으로, 대문자와 소문자를 구별하지 않고로 분류한다 앨범, 무시 최고의 문장 부호 등/a/an. 그 사용을 위해, 한 번 정렬 값을 계산하는 것이 더 효율적이며, 따라서 < =>을 재정의하십시오. 예 :

class Album 
def sort_value 
    @sv ||= @name.downcase.sub(/^\W*(the|an|a) /,"") 
    end 

    def <=>(other) 
    sort_value <=> (other.sort_value rescue other) 
    end 
end 
0

a와 b의 클래스에 Comparable을 포함하고 정렬을 고려한 적이 있습니까?

관련 문제