5

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

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

我尝试了一些类似的东西

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

但从列表中返回向量和一个随机元素,即

([2 3 4 5 6 7] 7)

来自 java 的一些类似帖子包括:如何在 main 中的所有声明对象中只选择一次该数组中的随机元素?

从 List<E> 中取 n 个随机元素?

4

2 回答 2

12

你不想repeatedlyiterate这里

(repeatedly 2 #(rand-nth [2 3 4 5 6 7]))
于 2014-03-16T19:01:02.740 回答
4

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

(defn choose-random [r v]
  (mapv v (repeatedly r #(rand-int (count v)))))
于 2014-03-16T19:08:24.457 回答