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_by
iş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 Random
dahil olmak üzere faydalı yöntemler sağlar modülü shuffle
ve shuffle!
da dahil olmak üzere çekirdek sınıfların bir grup Array
, Hash
ve String
.
Sadece Rails kullanıyorsanız dikkatli olun, çünkü maymun ekiminin Rails ile çakıştığı şekilde bazı kötü çatışmalar yaşadım ...