没有第n个元素的返回向量(第(nth)个补码)

use*_*011 0 function vector clojure

我需要从获得一个随机值vectorintegers.

我还需要在vector没有值键的情况下取回.

示例代码如下.我知道我可以轻松地将此代码放入function重用中.

但是想知道是否有一些功能或更好的方法来创建一个vector没有第n个元素的新东西?(因此是function核心clojure 中第(n)个的补充)

(let [ vector [1 2 3 5 9 1]
       id (rand-int (count vector))
       value (nth vector id)
       head (take id vector)
       tail (drop (+ id 1) vector)
       vector (flatten [head tail])]
  {:value value :new-vector vector})
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 5

矢量数据结构不能有效地移除单个元素.如果您经常这样做,通常应该使用更合适的数据结构.例如,如果向量的元素是不同的,则可以使用集合(或排序集,如果在其他情况下顺序对您很重要).或者,如果它们不是明显的,但你从不关心秩序,你可以做一个Fisher-Yates shuffle - 这里我们使用一个向量,但避免"从中间删除是昂贵的"问题,通过交换中间的一个元素在最后,然后从最终删除.