Frage

Ich möchte meine verschlüsselten Array-Elemente haben. So etwas wie folgt aus:

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

und so weiter, nach dem Zufall

War es hilfreich?

Lösung

gebaut jetzt:

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

Andere Tipps

Für Rubin 1.8.6 (die nicht shuffle in gebaut haben):

array.sort_by { rand }

Für Rubin 1.8.6 als sepp2k dem Beispiel, aber Sie wollen immer noch "shuffle" Methode verwenden.

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

-Code aus der Backports Gem nur für das Array für Ruby 1.8.6. Ruby 1.8.7 oder höher ist eingebaut.

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

Die Rubin facettiert Bibliothek von Erweiterungen hat eine Random Modul, das nützliche Methoden einschließlich shuffle und shuffle! zu einer Reihe von Kern-Klassen einschließlich Array, Hash und String bietet.

Seien Sie vorsichtig, wenn Sie mit Rails, wie ich einige bösen Auseinandersetzungen in die Art und Weise erleben sein monkeypatching mit Rails kollidierte ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top