zwykle zrobić cośNajprostszy kod do sortowania tablic w rubinach?
array.sort{|a,b| a.something <=> b.something}
Jak należy wysusz ten się?
zwykle zrobić cośNajprostszy kod do sortowania tablic w rubinach?
array.sort{|a,b| a.something <=> b.something}
Jak należy wysusz ten się?
użycie sort_by
array.sort_by{|e| e.something}
lub
sort_lambda = lambda{|e| e.something}
array.sort_by(&sort_lambda)
W ostatni można ponownie wykorzystać sort_lambda w innych sprawozdaniach sort_by
W Rails, lub raczej z ActiveSupport lub w Ruby 1.9 (być może 1.8.7, nie jestem pewien) możesz użyć nowego skrótu:
array.sort_by(&:something)
Należy pamiętać, że ma potencjalnie kosztowne (i być może korzystne: zależy od złożoności klucza sortowania) skutki uboczne: generuje i przechowuje tymczasową parę klucz-wartość dla każdej pozycji, dzięki czemu może sortować według nowego klucza. Zobacz discussion in the documentation, aby uzyskać więcej informacji na ten temat.
+1 zarówno sugestii Eimantas', ale często to wymyślić w przypadkach gdzie mam klasy niestandardowego zawsze rodzaju w ten sposób, jak Albums że powinien posortować rozróżniana wielkość liter, ignorując znaki interpunkcyjne i tym prowadzącej/a/an. W tym celu bardziej wydajne jest obliczenie wartości sortowania, a następnie ponowne zdefiniowanie < =>. Np .:
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
Czy wziąłeś pod uwagę Porównywalne w klasie dla aib, i po prostu nazywając sortowanie?
Tak, Ruby 1.8.7 ma Symbol # to_proc. – Chuck
Byłoby miło, gdyby array.sort_on (: coś) działało również. – tadman
Jest to banalne do zaimplementowania: 'def sort_on (property) sort_by & property end' – Chuck