Ho un array, ognuno dei cui elementi è un hash con tre coppie chiave / valore:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Mi piacerebbe ordinare i dati via zip
modo che tutti i phone
nella stessa area siano insieme. Ruby ha un modo semplice per farlo? Può will_paginate
dati di will_paginate
in un array?
semplici:
array_of_hashes.sort_by { |hsh| hsh[:zip] }
Nota:
Quando usi sort_by
devi assegnare il risultato a una nuova variabile: array_of_hashes = array_of_hashes.sort_by{}
altrimenti puoi usare il metodo “bang” per modificare sul posto: array_of_hashes.sort_by!{}
sorted = dataarray.sort {|a,b| a[:zip] <=> b[:zip]}
Usa il botto per modificare la matrice:
array_of_hashes.sort_by!(&:zip)
Oppure riassegnarlo:
array_of_hashes = array_of_hashes.sort_by(&:zip)
Nota che il metodo sort_by ordinerà per ordine crescente.
Se devi ordinare in ordine decrescente puoi fare qualcosa del genere:
array_of_hashes.sort_by!(&:zip).reverse!
o
array_of_hashes = array_of_hashes.sort_by(&:zip).reverse
Se si desidera eseguire la paginazione per i dati nell’array, è necessario richiedere “will_paginate / array” nel controller
nil non è paragonabile quindi per evitare di incontrarlo
sorted = dataarray.sort do |a,b| if a[:zip] == nil -1 # nil gets to the start, swap if you need otherwise elsif b[:zip] == nil 1 else a[:zip] <=> b[:zip] end end
Se hai Nested Hash (Hash all’interno di un formato hash) come elementi di Array (una struttura come la seguente) e vuoi ordinarlo per chiave (data qui)
data = [ { "2018-11-13": { "avg_score": 4, "avg_duration": 29.24 } }, { "2017-03-13": { "avg_score": 4, "avg_duration": 40.24 } }, { "2018-03-13": { "avg_score": 4, "avg_duration": 39.24 } } ]
Usa il metodo ‘sort_by’ di Array come
data.sort_by { |element| element.keys.first }