2010-09-29 155 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