SORU
12 Kasım 2009, PERŞEMBE


İ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
12 Kasım 2009, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • John Lynn

    John Lynn

    8 Ocak 2010
  • Justin Schenck

    Justin Schen

    24 Kasım 2006
  • TeachMeComputer

    TeachMeCompu

    31 EKİM 2009