faccio di solito qualcosa di simileIl codice più semplice per ordinare gli array in ruby?
array.sort{|a,b| a.something <=> b.something}
Come dovrei ASCIUGARSI questo?
faccio di solito qualcosa di simileIl codice più semplice per ordinare gli array in ruby?
array.sort{|a,b| a.something <=> b.something}
Come dovrei ASCIUGARSI questo?
uso sort_by
array.sort_by{|e| e.something}
o
sort_lambda = lambda{|e| e.something}
array.sort_by(&sort_lambda)
Con quest'ultimo è possibile riutilizzare sort_lambda in altre dichiarazioni sort_by
In Rails, o meglio con ActiveSupport, o in Ruby 1.9 (possibilmente 1.8.7, non è sicuro), è possibile utilizzare la nuova hotness a scelta rapida:
Si noti che sort_by
ha effetti secondari possibilmente costosi (e possibilmente vantaggiosi: dipende dalla complessità della chiave di ordinamento): genera e memorizza una coppia chiave-valore temporanea per ciascun elemento in modo che possa essere ordinata dalla nuova chiave. Vedere lo discussion in the documentation per ulteriori informazioni.
+1 a entrambi suggerimenti Eimantas', ma ho spesso questo venire nei casi in cui ho una classe personalizzata che sempre specie in questo modo, come gli album che dovrebbe ordinare caso insensibile, ignorando la punteggiatura leader e il/un/una. A tale scopo è più efficiente calcolare il valore di ordinamento una volta e quindi ridefinire di conseguenza < =>. Ad es .:
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
Avete preso in considerazione l'inclusione di Paragonabile nella classe per aeb, e solo chiamando sort?
Sì, Ruby 1.8.7 ha il simbolo # to_proc. – Chuck
Sarebbe bello se anche array.sort_on (: qualcosa) funzionasse. – tadman
È banale implementare: 'def sort_on (proprietà) sort_by & property end' – Chuck