Saya memiliki hash balasan yang ingin saya urutkan berdasarkan hitungan. Masalah yang saya temui adalah bahwa fungsi Hash.sort default mengurutkan angka seperti string daripada berdasarkan ukuran angka.
yaitu Given Hash:
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
Menjalankan kode ini:
metrics.sort {|a1,a2| a2[1]<=>a1[1]}
akan mengembalikan array yang diurutkan:
[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]
Meskipun 745 adalah jumlah yang lebih besar dari 9, 9 akan muncul pertama dalam daftar. Ketika mencoba untuk menunjukkan siapa yang memiliki hitungan teratas, ini membuat hidup saya sulit. :)
Ada ide tentang cara mengurutkan hash (atau bahkan array) dengan ukuran nilai angka?
Saya menghargai bantuan apa pun.
Jawaban:
Tidak tahu bagaimana Anda mendapatkan hasil Anda, karena itu tidak akan mengurutkan berdasarkan nilai string ... Anda harus membalikkan
a1
dana2
dalam contoh AndaCara terbaik dalam hal apa pun (sesuai Mladen) adalah:
Jika Anda membutuhkan hash, Anda dapat menggunakan
to_h
(dalam Ruby 2.0+)sumber
sort_by{|k,v| v}
metrics.sort_by{ |k, v| v }.reverse.to_h
Karena nilai adalah entri terakhir, Anda dapat melakukan:
sumber
&:last
?sort_by(&:last)
secara efektif singkatan untuksort_by {|x| x.last}
stackoverflow.com/questions/1217088/...Sudah dijawab tetapi masih. Ubah kode Anda menjadi:
Dikonversi menjadi string di sepanjang jalan atau tidak, ini akan melakukan pekerjaan.
sumber
Itu bukan perilaku yang saya lihat:
Apakah mungkin bahwa di suatu tempat di sepanjang garis angka Anda sedang dikonversi ke string? Apakah ada lebih banyak kode yang tidak Anda posting?
sumber