Ik wil graag dat mijn array-items worden versleuteld.
Zoiets als dit:
[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]
en zo verder, willekeurig
Antwoord 1, autoriteit 100%
Nu ingebouwd:
[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
Antwoord 2, autoriteit 9%
Voor ruby 1.8.6 (die geen shuffle ingebouwd heeft):
array.sort_by { rand }
Antwoord 3, autoriteit 3%
Voor ruby 1.8.6 zoals sepp2k’s voorbeeld, maar je wilt toch de “shuffle”-methode gebruiken.
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]
proost
Antwoord 4
Code van de Backports Gemvoor alleen de Array voor Ruby 1.8.6. Ruby 1.8.7 of hoger is ingebouwd.
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
Antwoord 5
De Ruby Facetsbibliotheek met extensies heeft een Random
module die handige methoden biedt, waaronder shuffle
en shuffle!
naar een aantal kernklassen, waaronder Array
, Hash
en String
.
Wees voorzichtig als je Rails gebruikt, want ik heb vervelende botsingen gehad met de manier waarop de monkeypatching botste met Rails’…