我有一个包含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中更快的方法是什么?
答案 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