Saya memiliki sebuah array, yang masing-masing elemennya adalah hash dengan tiga pasangan kunci / nilai:
:phone => "2130001111", :zip => "12345", :city => "sometown"
Saya ingin menyortir data zip
sehingga semua yang ada phone
di area yang sama sama. Apakah Ruby punya cara mudah untuk melakukan itu? Bisakah will_paginate
paginasi data dalam array?
[city,zip]=>phone
ataucity=>{zip1=>[<phones>], zip2=>...}
.Jawaban:
Sederhana:
catatan:
Saat menggunakan,
sort_by
Anda perlu menetapkan hasilnya ke variabel baru:array_of_hashes = array_of_hashes.sort_by{}
jika tidak, Anda dapat menggunakan metode "bang" untuk memodifikasi:array_of_hashes.sort_by!{}
sumber
sort_by
Anda perlu menetapkan hasilnya ke variabel baru:array_of_hashes = array_of_hashes.sort_by{}
jika tidak, Anda dapat menggunakan metode "bang" untuk memodifikasi di tempat:array_of_hashes.sort_by!{}
array_of_hashes.sort_by(&:zip)
.sort_by { |hsh| hsh.zip }
dan karenanya hanya akan berfungsi jika.zip
didefinisikan sebagai metode pada setiap Hash. Secara default hash tidak mengekspos kunci mereka sebagai metode, jadi saya kira Anda mungkin punya sesuatu yang terjadi di sana.array_of_hashes.sort_by!(&:zip)
.zip
dan[:zip]
keduanya akan berfungsi. ActiveRecords memiliki kedua gaya yang ditentukan.sumber
Gunakan bang untuk memodifikasi di tempat array:
Atau tetapkan kembali:
Perhatikan bahwa metode sort_by akan mengurutkan berdasarkan urutan naik.
Jika Anda perlu menyortir dengan urutan menurun, Anda dapat melakukan sesuatu seperti ini:
atau
sumber
&:
adalah jalan pintasmethod
, bukanattribute
! Anda menganggap bahwa Hash memiliki metode yang mencerminkan atribut ..reverse
metodenya: pJika Anda ingin memberi paginasi data dalam array, Anda harus meminta 'will_paginate / array' di controller Anda
sumber
Jika Anda memiliki Nested Hash (Hash di dalam format hash) sebagai elemen Array (struktur seperti berikut) dan ingin mengurutkannya dengan kunci (tanggal di sini)
Gunakan metode Array 'sort_by' sebagai
sumber