ฉันไม่เข้าใจเอกสารเลย
ฉันต้องการแผนที่ที่เรียงลำดับ "xxx" ซึ่งจะเรียงลำดับแผนที่ตามค่า ฉันจะทำอย่างไร?
ขอบคุณ.
ฉันไม่เข้าใจเอกสารเลย
ฉันต้องการแผนที่ที่เรียงลำดับ "xxx" ซึ่งจะเรียงลำดับแผนที่ตามค่า ฉันจะทำอย่างไร?
ขอบคุณ.
อีกวิธีหนึ่งคือการเปรียบเทียบค่าจากแผนที่ต้นฉบับภายในฟังก์ชันเปรียบเทียบ
(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}
<=
แทนที่จะ compare
ผูกโค้ดของฉันกับการใช้งาน sorted-map-by
ใช่หรือไม่ Clojure Docs อ้างถึงกรณีการใช้งานของ sorted-map-by
และเสนอวิธีแก้ปัญหาดังกล่าว: (into (sorted-map-by (fn [key1 key2] (compare [(key1 my-map2) key1] [(key2 my-map2) key2]))) my-map2)
แทน
- person mjaskowski; 18.04.2014
คุณใช้ sorted-map-by โดยระบุการเปรียบเทียบตามด้วยคู่คีย์-ค่า ตัวเปรียบเทียบเป็นฟังก์ชันที่รับสองคีย์และส่งกลับ -1, 0 หรือ 1 ขึ้นอยู่กับว่าคีย์แรกมีขนาดเล็กกว่า เท่ากับ หรือมากกว่าคีย์ที่สอง
ตัวอย่าง:
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}
เนื่องจากฟังก์ชันการเปรียบเทียบจะใช้เฉพาะคีย์เป็นอาร์กิวเมนต์ คุณจึงใช้ฟังก์ชันนี้เพื่อจัดเรียงตามค่าไม่ได้
ไม่มีวิธีใดที่จะมีแผนที่ที่เรียงลำดับโดยที่แผนที่จะถูกจัดเรียงตามค่า หากเป็นเช่นนั้น คุณจะไม่สามารถค้นหารายการด้วยคีย์ได้ เนื่องจากคุณไม่สามารถใช้ลำดับเพื่อกำหนดตำแหน่งของรายการได้ (เนื่องจากลำดับจะไม่ขึ้นอยู่กับคีย์)