sort-by - отличный ответ, который делает код намного лучше в простых случаях, когда он работает.Кроме того, функция сортировки может взять функцию для извлечения ключа сравнения из каждой карты, если вам нужно выполнить некоторую обработку каждого элемента.В этом примере я использую функцию сортировки, которая извлекает каждое имя и затем сравнивает их по строкам.
(sort #(compare (:name %1) (:name %2)) data)
=> ({:name "a", :value "b"} {:name "b", :value "b"} {:name "c", :value "b"})
это полезно, если в ваших коллекциях сравниваются разные имена:
(sort #(compare (:value %1) (:name %2)) data)
=> ({:name "a", :value "b"} {:name "c", :value "b"} {:name "b", :value "b"})
функция compare
является лучшей версией java .compareto (), потому что она правильно обрабатывает nil и правильно сравнивает коллекции clojure.это в основном короткий путь для использования.Оператор в большинстве случаев
(sort #(. (:name %1) (compareTo (:name %2))) data)
=> ({:name "a", :value "b"} {:name "b", :value "b"} {:name "c", :value "b"})