【问题标题】:Get the 3 closest values some given number in a list?获取列表中某个给定数字的 3 个最接近的值?
【发布时间】:2019-02-13 03:07:54
【问题描述】:

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

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

【问题讨论】:

  • 请注意,第一行不是有效的 Clojure 代码。 list 是一个函数,所以不要将它用作符号。此外,要声明一个列表,您应该在它前面加上一个单引号(以便告诉 Clojure 这是数据而不是函数调用)。最后但同样重要的是,括号不匹配。您可以通过显式使用list 函数将此行写为(def my-list '(3 6 7 8 9 12 14))(def my-list (list 3 6 7 8 9 12 14))

标签: clojure


【解决方案1】:
(letfn [(closest [a b]
            (take 3 (sort-by #(Math/abs (- % b)) a)))]
    (let [a '(3 6 7 8 9 12 14)]
        (closest a 10)))

【讨论】:

    【解决方案2】:

    遵循@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 可能会修改它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-21
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      相关资源
      最近更新 更多