如何在Clojure中删除第n个项目?

时间:2014-07-03 12:18:59

标签: clojure

如何删除集合中的第n个项目?我想做这样的事情:

(def coll [:apple :banana :orange])

(drop-nth 0 coll)  ;=> [:banana :orange]
(drop-nth 1 coll)  ;=> [:apple :orange]
(drop-nth 2 coll)  ;=> [:apple :banana]

到目前为止,有没有比我提出的更好的方法呢?

(defn drop-nth [n coll]
  (concat (take n coll) (nthrest coll (inc n))))

2 个答案:

答案 0 :(得分:15)

如何使用keep-indexed

(defn drop-nth [n coll]
   (keep-indexed #(if (not= %1 n) %2) coll))

这是一个适用于每个序列的通用解决方案。如果您想坚持使用向量,可以使用here所述的subvec

答案 1 :(得分:4)

这个怎么样

(defn drop-nth [n coll]
  (concat 
    (take n coll)
    (drop (inc n) coll)))