如何在 Ruby 中对数组进行随机排序(打乱)?

发布于 2024-08-13 09:12:38 字数 173 浏览 9 评论 0原文

我想让我的数组项目打乱。 像这样的东西:

[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]

等等,随机的

I'd like to have my array items scrambled.
Something like this:

[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]

and so on, randomly

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

盛夏已如深秋| 2024-08-20 09:12:38

现在内置:

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

Built in now:

[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
日记撕了你也走了 2024-08-20 09:12:38

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

array.sort_by { rand }

For ruby 1.8.6 (which does not have shuffle built in):

array.sort_by { rand }
蔚蓝源自深海 2024-08-20 09:12:38

对于 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]

干杯

For ruby 1.8.6 as sepp2k's example, but you still want use "shuffle" method.

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]

cheers

我也只是我 2024-08-20 09:12:38

来自 Backports Gem 的代码,仅适用于 Ruby 1.8.6 的数组。内置 Ruby 1.8.7 或更高版本。

class Array
  # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
  def shuffle
    dup.shuffle!
  end unless method_defined? :shuffle

  # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
  def shuffle!
    size.times do |i|
      r = i + Kernel.rand(size - i)
      self[i], self[r] = self[r], self[i]
    end
    self
  end unless method_defined? :shuffle!
end

Code from the Backports Gem for just the Array for Ruby 1.8.6. Ruby 1.8.7 or higher is built in.

class Array
  # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
  def shuffle
    dup.shuffle!
  end unless method_defined? :shuffle

  # Standard in Ruby 1.8.7+. See official documentation[http://ruby-doc.org/core-1.9/classes/Array.html]
  def shuffle!
    size.times do |i|
      r = i + Kernel.rand(size - i)
      self[i], self[r] = self[r], self[i]
    end
    self
  end unless method_defined? :shuffle!
end
寄意 2024-08-20 09:12:38

Ruby Facets 扩展库有一个 Random 模块提供了有用的方法,包括 shuffleshuffle! 到一系列核心类,包括 ArrayHashString

如果您使用 Rails,请务必小心,因为我经历了一些令人讨厌的冲突,因为它的猴子补丁与 Rails 的冲突......

The Ruby Facets library of extensions has a Random module which provides useful methods including shuffle and shuffle! to a bunch of core classes including Array, Hash and String.

Just be careful if you're using Rails as I experienced some nasty clashes in the way its monkeypatching clashed with Rails'...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文