在 Clojure 中,如果我有一个具有奇数个元素的向量,如何提取“中间”值?我已经看了一段时间,但不知道如何做!
一些例子:
(middle-value [0])
应返回[0]
(middle-value [0 1 2])
应返回[1]
(middle-value [0 1 :abc 3 4])
应返回[:abc]
(middle-value [0 1 2 "test" 4 5 6])
应返回["test"]
在 Clojure 中,如果我有一个具有奇数个元素的向量,如何提取“中间”值?我已经看了一段时间,但不知道如何做!
一些例子:
(middle-value [0])
应返回 [0]
(middle-value [0 1 2])
应返回 [1]
(middle-value [0 1 :abc 3 4])
应返回 [:abc]
(middle-value [0 1 2 "test" 4 5 6])
应返回 ["test"]
(defn middle-value [vect]
(when-not (empty? vect)
(vect (quot (count vect) 2))))
(quot (count vect) 2)
。 - Ankur(defn middle [[fst & rst]]
(if-not rst fst
(recur (butlast rst))))
如果元素数量为偶数,则返回nil
。
不太有趣但更有效的方法:
(nth v (quot (count v) 2))
其中v
是向量。
rst
在没有更多元素时为nil,因此您不需要对其进行seq
操作。 - Jeremy获取向量中的项数,将其除以2,向下取整结果并获取该索引处的项。假设有一个向量v
:
(get v (floor (/ (count v) 2)))
floor
不在clojure.core
中,您需要引入另一个库或直接使用java.lang.Math.floor
。quot
函数就不需要使用floor
函数了,可以参考bereal的回答。 - georgek