Saya tidak dapat memahami dokumentasinya sama sekali.
Saya ingin peta yang diurutkan "xxx", yang mengurutkan peta berdasarkan nilainya. Bagaimana aku melakukan itu?
Terima kasih.
Saya tidak dapat memahami dokumentasinya sama sekali.
Saya ingin peta yang diurutkan "xxx", yang mengurutkan peta berdasarkan nilainya. Bagaimana aku melakukan itu?
Terima kasih.
Cara lain adalah dengan membandingkan nilai dari peta asli dalam fungsi pembanding.
(def my-map {:chad 3 :bob 5 :sammy 4})
;; sort by keys ascending
(into (sorted-map) my-map)
=> {:bob 5, :chad 3, :sammy 4}
;; sort by values ascending
(into (sorted-map-by (fn [key1 key2] (compare (key1 my-map) (key2 my-map)))) my-map)
=> {:chad 3, :sammy 4, :bob 5}
;; sort by values descending
(into (sorted-map-by (fn [key1 key2] (compare (key2 my-map) (key1 my-map)))) my-map)
=> {:bob 5, :sammy 4, :chad 3}
<=
alih-alih compare
mengikat kode saya ke implementasi sorted-map-by
? Clojure Docs mengacu pada kasus penggunaan sorted-map-by
dan mengusulkan solusi berikut: (into (sorted-map-by (fn [key1 key2] (compare [(key1 my-map2) key1] [(key2 my-map2) key2]))) my-map2)
sebagai gantinya
- person mjaskowski; 18.04.2014
Anda menggunakan diurutkan-peta-menurut dengan menentukan perbandingan diikuti dengan pasangan nilai kunci. Komparator adalah fungsi yang mengambil dua kunci dan mengembalikan -1, 0, atau 1 bergantung pada apakah kunci pertama lebih kecil, sama dengan, atau lebih besar dari kunci kedua.
Contoh:
user=> (sorted-map-by (fn [k1 k2] (compare (mod k1 10) (mod k2 10))) 10 1 23 4 2 5)
{10 1, 2 5, 23 4}
Karena fungsi perbandingan hanya menggunakan kunci sebagai argumen, Anda tidak dapat menggunakan ini untuk mengurutkan berdasarkan nilai.
Tidak ada cara untuk mengurutkan peta yang petanya diurutkan berdasarkan nilainya. Jika ya, entri berdasarkan kunci tidak akan dapat ditemukan karena Anda tidak dapat menggunakan pesanan untuk menentukan di mana entri tersebut berada (karena pesanan tidak bergantung pada kunci).