Codice più semplice per ordinare le matrici in ruby?
Domanda
Di solito faccio qualcosa del genere
array.sort{|a,b| a.something <=> b.something}
Come dovrei ASCIUGARLO?
Soluzione
usa sort_by
array.sort_by{|e| e.something}
o
sort_lambda = lambda{|e| e.something}
array.sort_by(&sort_lambda)
Con quest'ultimo puoi riutilizzare sort_lambda in altre istruzioni sort_by
Altri suggerimenti
In Rails, o meglio con ActiveSupport, o in Ruby 1.9 (possibilmente 1.8.7, non sono sicuro) puoi usare il nuovo hotness di scorciatoia:
array.sort_by(&:something)
Nota che sort_by
ha effetti collaterali forse costosi (e forse vantaggiosi: dipende dalla complessità della chiave di ordinamento): genera e memorizza una coppia chiave-valore temporanea per ciascun elemento in modo che possa ordinare in base alla nuova chiave. Vedi la nella documentazione per ulteriori informazioni al riguardo.
+1 a entrambi i suggerimenti di Eimantas, ma spesso mi viene in mente nei casi in cui ho una classe personalizzata che sempre ordina in questo modo, come gli album che dovrebbero ordinare senza distinzione tra maiuscole e minuscole, ignorando punteggiatura iniziale e / a / an. A tale scopo è più efficiente calcolare una volta il valore dell'ordinamento, quindi ridefinire & Lt; = & Gt; di conseguenza. Per esempio:.
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
Hai preso in considerazione l'inclusione di Comparable nella classe per aeb, e hai appena chiamato sort?