Ich möchte, dass meine Array-Elemente verschlüsselt werden. Etwas wie das:
[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, zufällig
Ich möchte, dass meine Array-Elemente verschlüsselt werden. Etwas wie das:
[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, zufällig
Antworten:
Jetzt eingebaut:
[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
!
nach dem Aufruf zum Mischen ein hinzu. Ohne das wird !
das gemischte Array zurückgegeben und ist reif für eine Zuordnung.
Für Ruby 1.8.6 (in dem kein Shuffle eingebaut ist):
array.sort_by { rand }
sort_by
Funktion nicht wie die Sortierfunktion von Javascript (oder die Sortierfunktion von Ruby) funktioniert. Dabei ist es nur wichtig, ob die berechnete Zahl kleiner als Null, Null oder größer als Null ist. sort_by
Erinnert sich stattdessen an den berechneten Wert für jedes Element und sortiert die Elemente dann nach diesem Wert. In diesem Fall wird jedem Element eine Zufallszahl zugewiesen, und dann wird das Array nach diesen Zufallszahlen sortiert.
Code aus dem Backports Gem für nur 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 Ruby - Facets Bibliothek von Erweiterungen verfügt über ein Random
Modul , die nützliche Methode einschließlich bietet shuffle
und shuffle!
einschließlich zu einer Reihe von Kern - Klassen Array
, Hash
und String
.
Seien Sie nur vorsichtig, wenn Sie Rails verwenden, da ich einige böse Zusammenstöße in der Art und Weise erlebt habe, wie das Monkeypatching mit Rails '...