2016-02-02 60 views
3

我已經與128個值的陣列,每個值是1:如何創建一個隨機掩碼數組?

length = 128 
partials = Array.new length 

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

我想在一些(隨機)位置的設定值0(例如,在POS 1,6,50,70,100,112,120)。

當然,每次的位置數量可能會不同,如果我選擇7個不同的位置,我想結束7個不同的pos更改。

在Ruby中這樣做的更快的方法是什麼?

+0

爲什麼不簡單地使用隨機類? http://ruby-doc.org/core-2.2.0/Random.html – Aziuth

+0

工作@ @ Aziuth的評論:'7.times {partials [rand(128)] = 0}}' –

+0

我想你想知道從有經驗的人最快的方式。 –

回答

1

道:

array = 128.times.map{1} 

或用隨機噴0:

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

或把數字變成0的更高版本:

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

等..它播放和看你需要什麼

+1

您也可以將一個塊傳遞給'Array.new',例如'Array.new(128){rand(2)}' – Stefan

6

假設你ü要具有n元素與價值0,你可以做如下:

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

或者,也可以寫爲:

partials.tap{|p| p[0,n] = [0]*n}.shuffle 
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] 
+0

變體:'([1] *(length-zeroes))。concat([0] * zeroes).shuffle'。 –

0

另一種替代方案:

length = 10 
zeros = 2 

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