如何删除集合中的第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))))
答案 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)))