给出一个整数列表,找到与给定数字最接近的3个值。
=> (def mylist '(3 6 7 8 9 12 14))
=> (get_closest mylist 10)
(8 9 12)
答案 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
可能会对其进行修改。