获取列表中给定数字的3个最接近值?

时间:2019-02-13 03:07:54

标签: clojure

给出一个整数列表,找到与给定数字最接近的3个值。

=> (def mylist '(3 6 7 8 9 12 14))
=> (get_closest mylist 10)
(8 9 12)

2 个答案:

答案 0 :(得分:5)

(letfn [(closest [a b]
            (take 3 (sort-by #(Math/abs (- % b)) a)))]
    (let [a '(3 6 7 8 9 12 14)]
        (closest a 10)))

答案 1 :(得分:1)

遵循@akond的回答,但作为一般功能:

(defn closest [x n coll]
  "Return a list of the n items of coll that are closest to x"
  (take n (sort-by #(Math/abs (- x %)) coll)))

(closest 4 3 (range 10))
; => (4 3 5)

请注意,如果coll是Java数组sort-by可能会对其进行修改。