从向量中选取“随机”元素

问题描述 投票:0回答:3

我希望从向量中挑选出随机(即伪随机)元素。该函数将有一个输入,称为 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 中的所有声明对象中仅选择此数组中的随机元素一次?

从列表中随机取出n个元素

clojure clojure-contrib
3个回答
13
投票

你想要

repeatedly
而不是
iterate
在这里

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

4
投票

从向量中的向量

r
返回
v
随机元素的函数是...

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

1
投票

如果你想在返回向量中有不同的向量元素,你可以使用:

(defn random-take-n [n v]
  (->> (shuffle v)
  (take n)))

(random-take-n 4 (range 200))
;; => (19 14 172 95)
© www.soinside.com 2019 - 2024. All rights reserved.