İki boyutlu diziler ve erişim-diziler alt Ruby oluşturun
Eğer iki boyutlu bir dizi oluşturmak için ve hızlı bir şekilde yatay veya dikey herhangi bir alt dizi erişmek için bir olasılık varsa merak ediyorum?
Şu durumda yatay bir alt dizi ulaşabileceğimize inanıyorum
x = Array.new(10) { Array.new(20) }
x[6][3..8] = 'something'
Ama anladığım kadarıyla, bu gibi giremiyoruz:
x[3..8][6]
Nasıl önlemek veya bu sınırı girebilir miyim?
CEVAP
2 boyutlu Arrays
yol onları uygulamak bazı sorunlar var.
a= [[1,2],[3,4]]
a[0][2]= 5 # works
a[2][0]= 6 # error
Array
Hash
Çok boyutlu Hashes
Arrays
kullanmayı tercih ediyorum
a= Hash.new
a[[1,2]]= 23
a[[5,6]]= 42
Bu el ile collumns veya satır oluşturmak zorunda değilsiniz avantaja sahiptir. Karma ekleme O(1), burada, senin gibi Hash
çok büyük olmaz dezavantajı yok yani neredeyse.
Hatta belirtilmemiş tüm öğeler için varsayılan değer ayarlayabilirsiniz
a= Hash.new(0)
Şimdi subarrays almak hakkında
(3..5).to_a.product([2]).collect { |index| a[index] }
[2].product((3..5).to_a).collect { |index| a[index] }
(a..b).to_a
O(n) olarak çalışır. Hash
bir öğe alınıyor, neredeyse O(n) çalışır toplamak neredeyse O(1) ' dir. Şimdi O daha hızlı(n), n elemanları her zaman olduğu gibi kopyalama O(n) yapmak için bir yol yoktur.
Hashes
çok büyük olduğunda sorunları olabilir. Eğer veri miktarı benim kocaman oldu bilseydim iki kez böyle Array
çok boyutlu uygulama hakkında kötü düşünmem.
Vardır bir ters var mı? Ruby için Dizi...
Nasıl ruby'de diziler kesişim, birleşi...
Neden C# çok Boyutlu diziler uygulamak...
Neden zamanı boyutlu diziler ve std::C...
Ruby: bir şeyle, bir karma her bir değ...