İ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.

Neden C# çok Boyutlu diziler uygulamak...
Neden zamanı boyutlu diziler ve std::C...
Ruby: bir ÅŸeyle, bir karma her bir deÄŸ...
Bitiştirmek İki tek boyutlu NumPy dizi...
Diziler ve Karma için IRB baskı yapı y...