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

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • Truc Minh

    Truc Minh

    23 Ocak 2011