我有一個數組@number = [1,2,3,4,5,6,7,8,9]
現在,我想隨機數組內容......像如:[5,3,2,6,7,1,8]
請指導我如何與它進行。隨機化數組元素
隨機化數組元素
回答
使用shuffle
方法...
irb(main):001:0> [1,2,3,4,5].shuffle
=> [3, 4, 2, 5, 1]
loop n times
i = random array index
j = random array index
swap elements i and j
end
隨機不保證給出正確分佈的結果。 因此,使用兩個隨機索引交換元素可能會使您的數組中間有未更改序列的數組。您應該將i從0遞增到n並採用隨機j來確保* all *元素至少交換一次。 – 2010-09-29 04:45:58
很糟糕。偶數和奇數「n」給出了兩組不同的排列組合。這很傷心,但仍然有一些老師教這個方法的學生......永遠不要這樣做! – Nakilon 2010-09-29 04:54:41
@Nakilon:你在說什麼?如果n是偶數或奇數,爲什麼它很重要? – RyanHennig 2010-09-29 17:37:18
的shuffle
命令返回數組的隨機版本
如:
[1,2,3].shuffle => [2,3,1]
適用於1.8.7p249 – 2010-09-29 04:45:35
如果你想隨機放置,你可以直接寫'@ number.shuffle!' – Peter 2010-09-29 05:08:36
[1,2,3,4,5,6,7,8,9].sort_by {rand}[0,9]
=> [5, 7, 3, 8, 9, 4, 2, 1, 6]
適合1.8.6 :)但現在已過時! – horseyguy 2010-09-29 14:50:45
重複http://stackoverflow.com/questions/1816378/how-to-random-sort-scramble-an-array-in-ruby – Nakilon 2010-09-29 04:47:54
您的正視功能從數組中刪除了2個元素。即使'shuffle'也不能這樣做,gg! – Nakilon 2010-09-29 05:00:23