Clojure中的简单新手问题......
如果 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中的简单新手问题......
如果 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))))
一个有点低效但有趣的实现(使用序列抽象而不是具体向量):
(defn middle [[fst & rst]]
(if-not rst fst
(recur (butlast rst))))
在元素数量偶数的情况下返回nil
。
不那么有趣但更高效:
(nth v (quot (count v) 2))
v
向量在哪里。
获取向量中的项目数,将其减半,将结果取底并获取该索引处的项目。假设一个向量v
:
(get v (floor (/ (count v) 2)))
不幸floor
的是不在 中clojure.core
,您需要为此拉入另一个库或直接转到java.lang.Math.floor
.
当然,这段代码对偶数向量没有任何作用,但我假设你已经可以处理这些了。