Mam tablicę, której każdy element jest skrótem z trzema parami klucz / wartość:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Chciałbym posortować dane zip
tak, aby wszystkie phone
znaki w tym samym obszarze były razem. Czy Ruby ma na to łatwy sposób? Czy można will_paginate
podzielić dane na strony w tablicy?
[city,zip]=>phone
lubcity=>{zip1=>[<phones>], zip2=>...}
.Odpowiedzi:
Simples:
Uwaga:
Podczas używania
sort_by
musisz przypisać wynik do nowej zmiennej: warray_of_hashes = array_of_hashes.sort_by{}
przeciwnym razie możesz użyć metody "bang", aby zmodyfikować w miejscu:array_of_hashes.sort_by!{}
źródło
sort_by
musisz przypisać wynik do nowej zmiennej: warray_of_hashes = array_of_hashes.sort_by{}
przeciwnym razie możesz użyć metody "bang", aby zmodyfikować w miejscu:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
więc będzie działać tylko wtedy, gdy.zip
zostanie zdefiniowany jako metoda dla każdego skrótu. Domyślnie skróty nie ujawniają swoich kluczy jako metod, więc myślę, że prawdopodobnie dzieje się tam coś innego.array_of_hashes.sort_by!(&:zip)
.zip
i[:zip]
oba będą działać. ActiveRecords mają zdefiniowane oba style.źródło
Użyj huku, aby zmodyfikować tablicę w miejscu:
Lub przypisz go ponownie:
Zwróć uwagę, że metoda sort_by będzie sortować według kolejności rosnącej.
Jeśli chcesz sortować w kolejności malejącej, możesz zrobić coś takiego:
lub
źródło
&:
jest skrótem domethod
, nieattribute
! Zakładasz, że Hash ma metody odzwierciedlające atrybuty ...reverse
metodę: pJeśli chcesz paginować dane w tablicy, powinieneś wymagać 'will_paginate / array' w swoim kontrolerze
źródło
Jeśli masz zagnieżdżony Hash (Hash w formacie hash) jako elementy Array (strukturę podobną do poniższej) i chcesz posortować go według klucza (data tutaj)
Użyj metody Array „sort_by” jako
źródło