Eu tenho uma matriz, cada um de cujos elementos é um hash com três pares de chave / valor:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Eu gostaria de classificar os dados zip
para que todos os phone
s na mesma área estejam juntos. Ruby tem uma maneira fácil de fazer isso? Pode will_paginate
paginar dados em uma matriz?
[city,zip]=>phone
oucity=>{zip1=>[<phones>], zip2=>...}
.Respostas:
Simples:
Nota:
Ao usar,
sort_by
é necessário atribuir o resultado a uma nova variável:array_of_hashes = array_of_hashes.sort_by{}
caso contrário, você pode usar o método "bang" para modificar no local:array_of_hashes.sort_by!{}
fonte
sort_by
é necessário atribuir o resultado a uma nova variável:array_of_hashes = array_of_hashes.sort_by{}
caso contrário, você pode usar o método "bang" para modificar no local:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
e, portanto, só funcionará se.zip
for definido como um método em cada Hash. Por padrão, os hashes não expõem suas chaves como métodos, então acho que você provavelmente tem algo mais acontecendo lá.array_of_hashes.sort_by!(&:zip)
.zip
e[:zip]
ambos funcionarão. Os ActiveRecords têm ambos os estilos definidos.fonte
Use o bang para modificar no local a matriz:
Ou redesigne-o:
Observe que o método sort_by classifica por ordem crescente.
Se você precisar classificar em ordem decrescente, poderá fazer algo assim:
ou
fonte
&:
é um atalho paramethod
, nãoattribute
! Você está presumindo que o Hash tem métodos que refletem atributos ..reverse
método: pSe você quiser paginar os dados na matriz, deverá exigir 'will_paginate / array' em seu controlador
fonte
Se você possui Hash aninhado (Hash dentro de um formato de hash) como elementos de matriz (uma estrutura como a seguinte) e deseja classificá-lo por chave (data aqui)
Use o método Array 'sort_by' como
fonte