Tengo una matriz, cada uno de cuyos elementos es un hash con tres pares clave / valor:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Me gustaría ordenar los datos zip
para que todas las phone
s de la misma área estén juntas. ¿Ruby tiene una manera fácil de hacer eso? ¿Puede will_paginate
paginar datos en una matriz?
[city,zip]=>phone
ocity=>{zip1=>[<phones>], zip2=>...}
.Respuestas:
Simples:
Nota:
Cuando lo use
sort_by
, debe asignar el resultado a una nueva variable: de loarray_of_hashes = array_of_hashes.sort_by{}
contrario, puede usar el método "bang" para modificar en su lugar:array_of_hashes.sort_by!{}
fuente
sort_by
, debe asignar el resultado a una nueva variable: de loarray_of_hashes = array_of_hashes.sort_by{}
contrario, puede usar el método "bang" para modificar en su lugar:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
por lo que solo funcionará si.zip
se define como un método en cada Hash. Por defecto, los hashes no exponen sus claves como métodos, por lo que creo que probablemente hay algo más allí.array_of_hashes.sort_by!(&:zip)
.zip
y[:zip]
ambos funcionarán. ActiveRecords tiene ambos estilos definidos.fuente
Use la explosión para modificar en su lugar la matriz:
O reasignarlo:
Tenga en cuenta que el método sort_by se ordenará por orden ascendente.
Si necesita ordenar en orden descendente, puede hacer algo como esto:
o
fuente
&:
es un atajo paramethod
, noattribute
! Usted presume que el Hash tiene métodos que reflejan atributos ..reverse
método: pSi desea paginar los datos en la matriz, debe requerir 'will_paginate / array' en su controlador
fuente
Si tiene Hash anidado (Hash dentro de un formato hash) como elementos de matriz (una estructura como la siguiente) y desea ordenarlo por clave (fecha aquí)
Utilice el método Array 'sort_by' como
fuente