组合多个数组的随机元素

时间:2016-09-21 01:22:36

标签: arrays ruby random

在Ruby中,我如何从一个数组中选择一个随机元素并将其与第二个数组中随机选择的元素组合?

例如,如果我有数组:

    array1 = ["x", "y", "z"]
    array2 = ["a", "b", "c"]

我正在寻找输出为(array1_element)(array2_element)(array1_element),如xby或ycz或xbx等等。可以在多个阵列上使用Ruby的.sample方法来打印出单个字符串吗?

3 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。

1)您可以使用sample方法。

array1.sample #=> return a random element from the array.

然后你可以像

一样使用字符串插值
result = "#{array1.sample}#{array2.sample}#{array3.sample}" #=> ie "xby"

2)您可以生成随机索引值

array1[rand(array1.length)]

这将生成从0length-1的随机索引,并在数组上调用[]方法。然后,您也可以使用字符串插值。

3)您可以使用shuffle方法,然后使用first方法

array1.shuffle.first

shuffle会将数组洗牌,你可以返回第一个元素。

我只是列出了一些我能想到的东西。可能有很多其他方法可以做到这一点。

答案 1 :(得分:1)

怎么样

(array1 + array2).sample(3)   # => ["b", "x", "a"]

如果您希望以数组形式提供答案,或

(array1 + array2).sample(3).join('')   # => "zxb"

如果你想以字符串形式?

如果订单明确是[array1_elt, array2_elt, array1_elt]并且您不希望重复任何元素,那么以下应该可以解决这个问题:

array1.sample(2).insert(1, array2.sample)

再次,追加.join('')来对结果进行字符串化。

答案 2 :(得分:0)

我假设您希望形成一个数组[a,b,c],其中从第一个数组中随机选择ac,并从第二个数组中随机选择b,然后将数组的三个元素连接成一个字符串。

如果您反复采样,可能值得构建一个包含所有(3^3=27)组合的数组,然后从该数组中进行采样:

arr = array1.product(array2, array1).map(&:join)
  #=> ["xax", "xay", "xaz", "xbx", "xby", "xbz", "xcx", "xcy", "xcz",
  #    "yax", "yay", "yaz", "ybx", "yby", "ybz", "ycx", "ycy", "ycz",
  #    "zax", "zay", "zaz", "zbx", "zby", "zbz", "zcx", "zcy", "zcz"]

arr.sample #=> "zcx"
arr.sample #=> "yay"
arr.sample #=> "ycz" 
arr.sample #=> "xby"