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

Jos*_*ver 7 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]
Run Code Online (Sandbox Code Playgroud)

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

(defn drop-nth [n coll]
  (concat (take n coll) (nthrest coll (inc n))))
Run Code Online (Sandbox Code Playgroud)

slo*_*oth 15

怎么用keep-indexed

(defn drop-nth [n coll]
   (keep-indexed #(if (not= %1 n) %2) coll))
Run Code Online (Sandbox Code Playgroud)

这是一个适用于每个序列的通用解决方案.如果你想坚持使用矢量,你可以subvec按照这里的描述使用.