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

  • katherine gomez

    katherine go

    1 Aralık 2011
  • skiesofblack.net

    skiesofblack

    14 HAZİRAN 2009
  • Video-Tutorials.Net

    Video-Tutori

    15 Mart 2011