【问题标题】:Picking "Random" elements from a vector从向量中选择“随机”元素
【发布时间】:2014-04-21 20:24:00
【问题描述】:

我希望从向量中挑选出随机(即伪随机)元素。该函数将有一个输入,称为 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>?

【问题讨论】:

  • (repeatedly n (rand-int (count v)))
  • 如果允许重复元素,为什么r必须限制在v中的元素数量?
  • 这是我想施加的约束。我在 v 中寻找 r 并且不想要 |r|超过 v 的长度。这是人为的约束。

标签: clojure clojure-contrib


【解决方案1】:

你想要repeatedly而不是iterate这里

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 2013-10-19
      相关资源
      最近更新 更多