从矢量中挑选“随机”元素

时间:2014-03-16 18:04:16

标签: clojure clojure-contrib

我希望从矢量中挑选出随机(即伪随机)元素。该函数将有一个输入,称之为r,它将选择要选择的元素数。此外,称为v的向量也必须是输入。这是我从未尝试过的,也不知道从哪里开始。

进入构造的假设将是r小于v中元素的数量。从v中选择的重复元素也不是问题。要明确的是,元素将是严格的数字,实际上它们将是浮点数,我希望在选择时保留该结构。

我尝试了一些

的内容
(take 2 (iterate rand-nth [2 3 4 5 6 7]))

但返回列表中的向量和随机元素,即

([2 3 4 5 6 7] 7)

java中的一些类似帖子包括:How to choose a random element in this array only once across all declared objects in main?

Take n random elements from a List<E>?

2 个答案:

答案 0 :(得分:9)

您希望此处repeatedly不是iterate

(repeatedly 2 #(rand-nth [2 3 4 5 6 7]))

答案 1 :(得分:3)

在向量中从向量r返回v个随机元素的函数是......

(defn choose-random [r v]
  (mapv v (repeatedly r #(rand-int (count v)))))