如何创建随机掩码数组?

时间:2016-02-02 10:59:40

标签: arrays ruby

我有一个包含128个值的数组,每个值都是1:

length = 128
partials = Array.new length

partials.each_index do |i|
    partials[i] = 1
end

我想在某个(随机)位置设置值0(例如,在位置1,6,50,70,100,112,120)。

当然,每次位置的数量可能会有所不同,如果我选择7个不同的位置,我想以7个不同的位置结束更改。

在Ruby中更快的方法是什么?

4 个答案:

答案 0 :(得分:6)

假设您希望n元素的值为0,您可以执行以下操作:

n = 5
partials[0,n] = [0]*n
partials.shuffle

或者,也可以写成:

partials.tap{|p| p[0,n] = [0]*n}.shuffle

答案 1 :(得分:4)

您可以将零合并到数组创建中:

length = 128
zeros = 7
partials = Array.new(length) { |i| i < zeros ? 0 : 1 }.shuffle
#=> [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
#    1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
#    1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
#    1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
#    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
#    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
#    1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
#    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

答案 2 :(得分:1)

一种方式:

array = 128.times.map{1}

或随机喷涂0:

array = 128.times.map{rand(2)}

或稍后放0:

10.times{array[rand(128)]=0}

等...玩它并看看你需要什么

答案 3 :(得分:0)

另一种选择:

length = 10
zeros = 2

([0]*(length-zeros)+[1]*zeros).shuffle