나는 보통 루비에서 배열을 정렬하는 가장 간단한 코드는 무엇입니까?
array.sort{|a,b| a.something <=> b.something}
같은 것을 어떻게이 건조해야합니까?
나는 보통 루비에서 배열을 정렬하는 가장 간단한 코드는 무엇입니까?
array.sort{|a,b| a.something <=> b.something}
같은 것을 어떻게이 건조해야합니까?
사용 sort_by 다른 sort_by 문
, 또는 오히려 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을 참조하십시오.
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
a와 b의 클래스에 Comparable을 포함하고 정렬을 고려한 적이 있습니까?
네, Ruby 1.8.7은 Symbol # to_proc입니다. – Chuck
array.sort_on (: something)도 잘 작동한다면 좋을 것입니다. – tadman
구현하는 것은 간단합니다 :'def sort_on (property) sort_by & property end' – Chuck