我有一个包含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中,有什么更快的方法可以做到这一点?
n
个元素,您可以执行以下操作:n = 5
partials[0,n] = [0]*n
partials.shuffle
另外,也可以写成:
partials.tap{|p| p[0,n] = [0]*n}.shuffle
您可以将零整合到数组创建中:
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]
([1]*(length-zeroes)).concat([0]*zeroes).shuffle
。 - Cary Swovelandarray = 128.times.map{1}
array = 128.times.map{rand(2)}
10.times{array[rand(128)]=0}
等等……和它玩耍,看看你需要什么
Array.new
,例如 Array.new(128) { rand(2) }
。 - Stefan另一个选择:
length = 10
zeros = 2
([0]*(length-zeros)+[1]*zeros).shuffle
7.times{partials[rand(128)]=0}}
- Sagar Pandyarnd_arr
的方法,调用rnd_arr(n,z)
,返回一个包含z
个零和n-z
个一的数组,使得零(因此也是一)的位置被随机化了吗? - Cary Swoveland