Clojure Goodness: Finding The Maximum Or Minimum Value
To find the maximum or minimum value for numeric values we can use the max
and min
function. The functions accept one or more numeric arguments and the value that is maximum or minimum is returned. If the numbers are already in a sequence we can use apply max
or apply min
. If the values are not numbers we can use the max-key
or min-key
functions. These functions take as first argument a function that returns a number. So we can get the value that has the maximum or minimum return value for the function we pass as first argument.
In the next exmaple code we use the max
, min
, max-key
and min-key
functions:
(ns mrhaki.core.min-max
(:require [clojure.test :refer [is]]))
;; We can use max to find the maximum number in the given arguments.
(is (= 20 (max 10 2 3 1 20)))
;; If we have a collection we can use apply max to find the maximum number.
(is (= 20 (apply max [10 2 3 1 20])))
;; We can use min to find the minimum number in the given arguments.
(is (= 1 (min 10 2 3 1 20)))
;; And also use apply min when we have collection with numbers.
(is (= 1 (apply min [10 2 3 1 20])))
;; When the arguments are not numbers we can provide a function to get
;; back numbers and use that function with max-key to find the maximum.
(is (= "Clojure" (max-key count "Java" "Groovy" "Clojure")))
(is (= "Clojure" (apply max-key count ["Java" "Groovy" "Clojure"])))
;; And to find the minimum for non-numbered arguments we can use min-key
;; with a function to get back numbers.
(is (= "Java" (min-key count "Java" "Groovy" "Clojure")))
(is (= "Java" (apply min-key count ["Java" "Groovy" "Clojure"])))
Written with Clojure 1.10.1.