Как сделать макс-бай в clojure?
Если у меня есть последовательность записей, определенных (defrecord Person [name age])
и я хочу получить запись о человеке с максимальным возрастом, есть ли более простой способ сделать это, чем
(reduce #(if (> (:age %1) (:age %2)) %1 %2) people)
Это единственный способ сделать это до сих пор, но похоже, что это должен быть достаточно распространенный сценарий, поэтому должны быть некоторые встроенные библиотечные функции, которые делают это проще и / или более универсальным.
2 ответа
Решение
clojure.core/max-key
является подходящим инструментом для работы.
(apply max-key :age [{:age 12} {:age 20} {:age 30}]) ;; -> {:age 30}
(last (sort-by :age [{:age 12} {:age 20} {:age 30}]))
сортировка использует сравнение