Как сделать макс-бай в 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}]))

сортировка использует сравнение

Другие вопросы по тегам