【问题标题】:Assign array elements randomly but ensure that all are used?随机分配数组元素但确保全部使用?
【发布时间】:2021-04-28 19:43:45
【问题描述】:

如何将数组元素分配到不同的对象中,以使

  • 数组元素没有回收(即,相同的数组元素永远不会被多次使用,除非它是重复的),并且
  • 所有值都会被使用,包括重复值。创建的对象的结果数应与数组的长度相同
  • 它适用于不一定是单个整数的数组元素

示例

数组[1, 2] 将有两种可能的结果:

  1. a = 1 和 b = 2,或
  2. a = 2 和 b = 1。

[1, 2, 3] 的数组将有 6 种可能的结果。

用例

我想对 Rails 邮件预览的输入进行随机抽样,但输入并非全部属于同一类,因此我无法执行 Customer.all.sample 之类的操作

我也不能简单地将可能的输入组合到一个数组中并从中采样,因为这可能会导致同一个元素被多次使用。

【问题讨论】:

  • 你的例子中ab是什么意思?
  • @user1934428 a 和 b 在我的真实用例中,其中一些邮件预览中的“to”和“from”。基本上是一个包含患者和医生的应用程序,我不希望预览总是从患者到医生或总是从医生到患者,而是随机化以获得更多“真实世界”的电子邮件预览

标签: arrays ruby


【解决方案1】:

.sample 默认会不替换采样。

例如,

arr = [1, 2, 3]

a, b, c = arr.sample(arr.length)

a
=> 3

b
=> 1

c
=> 2

【讨论】:

    【解决方案2】:

    Array#shuffle 是另一个选项,例如:

    [1, 2, 3, 1, 1].shuffle
    

    产生[3, 2, 1, 1, 1], [1, 1, 2, 3, 1], ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2018-02-07
      • 2011-04-18
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      相关资源
      最近更新 更多