我希望从向量中挑选出随机(即伪随机)元素。该函数将有一个输入,称为 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 中的所有声明对象中仅选择此数组中的随机元素一次?
你想要
repeatedly
而不是iterate
在这里
(repeatedly 2 #(rand-nth [2 3 4 5 6 7]))
从向量中的向量
r
返回v
随机元素的函数是...
(defn choose-random [r v]
(mapv v (repeatedly r #(rand-int (count v)))))
如果你想在返回向量中有不同的向量元素,你可以使用:
(defn random-take-n [n v]
(->> (shuffle v)
(take n)))
(random-take-n 4 (range 200))
;; => (19 14 172 95)