如何在Ruby中随机排序(加扰)数组?

Dan*_*ier 121 ruby arrays random shuffle

我想让我的数组项目混乱.像这样的东西:

[1,2,3,4].scramble => [2,1,3,4]
[1,2,3,4].scramble => [3,1,2,4]
[1,2,3,4].scramble => [4,2,3,1]
Run Code Online (Sandbox Code Playgroud)

等等,随机

Ron*_*man 281

现在内置:

[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
Run Code Online (Sandbox Code Playgroud)

  • 如果你想自己实现它:http://en.wikipedia.org/wiki/Fisher-Yates_shuffle (3认同)
  • 只是想添加:如果你想影响集合,请在调用 shuffle 之后添加一个“!”。如果没有“!”,则返回已打乱的数组,并且可以进行赋值。 (3认同)

sep*_*p2k 26

对于ruby 1.8.6(没有内置shuffle):

array.sort_by { rand }
Run Code Online (Sandbox Code Playgroud)

  • @Josh:您链接的页面描述了一种完全不同的算法.请注意,ruby的`sort_by`函数不像javascript的sort函数(或ruby的sort函数)那样工作,它只关心计算的数字是否小于零,零或大于零.相反,`sort_by`会记住每个项目的计算值,然后按该值对项目进行排序.因此,在这种情况下,为每个项目分配一个随机数,然后按这些随机数对数组进行排序. (11认同)

小智 9

对于ruby 1.8.6作为sepp2k的例子,但你仍然想要使用"shuffle"方法.

class Array
  def shuffle
    sort_by { rand }
  end
end

[1,2,3,4].shuffle #=> [2,4,3,1]
[1,2,3,4].shuffle #=> [4,2,1,3]
Run Code Online (Sandbox Code Playgroud)

干杯