2010-09-29 134 views
6

我有一個數組@number = [1,2,3,4,5,6,7,8,9]
現在,我想隨機數組內容......像如:[5,3,2,6,7,1,8]
請指導我如何與它進行。隨機化數組元素

+2

重複http://stackoverflow.com/questions/1816378/how-to-random-sort-scramble-an-array-in-ruby – Nakilon 2010-09-29 04:47:54

+1

您的正視功能從數組中刪除了2個元素。即使'shuffle'也不能這樣做,gg! – Nakilon 2010-09-29 05:00:23

回答

9

使用shuffle方法...

irb(main):001:0> [1,2,3,4,5].shuffle 
=> [3, 4, 2, 5, 1] 
-2
loop n times 
    i = random array index 
    j = random array index 
    swap elements i and j 
end 
+0

隨機不保證給出正確分佈的結果。 因此,使用兩個隨機索引交換元素可能會使您的數組中間有未更改序列的數組。您應該將i從0遞增到n並採用隨機j來確保* all *元素至少交換一次。 – 2010-09-29 04:45:58

+0

很糟糕。偶數和奇數「n」給出了兩組不同的排列組合。這很傷心,但仍然有一些老師教這個方法的學生......永遠不要這樣做! – Nakilon 2010-09-29 04:54:41

+0

@Nakilon:你在說什麼?如果n是偶數或奇數,爲什麼它很重要? – RyanHennig 2010-09-29 17:37:18

7

shuffle命令返回數組的隨機版本

如:

[1,2,3].shuffle => [2,3,1] 
+1

適用於1.8.7p249 – 2010-09-29 04:45:35

+2

如果你想隨機放置,你可以直接寫'@ number.shuffle!' – Peter 2010-09-29 05:08:36

-1

如果您正在使用舊版本紅寶石...這將工作

def randomize(array) 
b = [] 
array.length.downto(1) { |n| 
    b.push array.delete_at(rand(n)) 
} 
b 

一個= [1,2,3,4,5] B =隨機化的(a) 印片B

+0

哥們這段代碼亂七八糟! – horseyguy 2010-09-29 14:51:56

+0

至少,他是這裏唯一一位提供了無內置功能的工作解決方案的人。 – Nakilon 2010-09-30 07:12:24

1
[1,2,3,4,5,6,7,8,9].sort_by {rand}[0,9] 
=> [5, 7, 3, 8, 9, 4, 2, 1, 6] 
+0

適合1.8.6 :)但現在已過時! – horseyguy 2010-09-29 14:50:45