Dizi öğelerimin karıştırılmasını istiyorum. Bunun gibi bir şey:
[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]
ve benzeri, rastgele
Dizi öğelerimin karıştırılmasını istiyorum. Bunun gibi bir şey:
[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]
ve benzeri, rastgele
Yanıtlar:
Şimdi yerleşik:
[1,2,3,4].shuffle => [2, 1, 3, 4]
[1,2,3,4].shuffle => [1, 3, 2, 4]
!, karıştırma çağrısından sonra bir ekleyin . !Karıştırılmış dizi olmadan döndürülür ve bir atama için olgunlaşır.
Ruby 1.8.6 için (yerleşik karıştırma özelliği olmayan):
array.sort_by { rand }
sort_byişlevinin, yalnızca hesaplanan sayının sıfırdan küçük, sıfır veya sıfırdan büyük olmasına önem veren javascript'in sıralama işlevi (veya bu konuda Ruby'nin sıralama işlevi) gibi çalışmadığını unutmayın . Bunun yerine sort_by, her öğe için hesaplanan değeri hatırlar ve ardından öğeleri bu değere göre sıralar. Yani bu durumda her öğeye rastgele bir sayı atanır ve ardından dizi bu rastgele sayılara göre sıralanır.
Sadece Ruby 1.8.6 Dizisi için Backports Geminden kod . Ruby 1.8.7 veya üstü yerleşiktir.
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
Yakut YÖNÜ uzantıların kütüphane bulunur Randomdahil olmak üzere faydalı yöntemler sağlar modülü shuffleve shuffle!da dahil olmak üzere çekirdek sınıfların bir grup Array, Hashve String.
Sadece Rails kullanıyorsanız dikkatli olun, çünkü maymun ekiminin Rails ile çakıştığı şekilde bazı kötü çatışmalar yaşadım ...