Es gibt einige Probleme mit der zweidimensionalen ArraysImplementierung.
a= [[1,2],[3,4]]
a[0][2]= 5
a[2][0]= 6
Hash wie Array
Ich bevorzuge es Hashesfür mehrdimensionaleArrays
a= Hash.new
a[[1,2]]= 23
a[[5,6]]= 42
Dies hat den Vorteil, dass Sie keine Spalten oder Zeilen manuell erstellen müssen. Das Einfügen in Hashes ist fast O (1) , daher gibt es hier keinen Nachteil, solange Ihr Hashnicht zu groß wird.
Sie können sogar einen Standardwert für alle nicht angegebenen Elemente festlegen
a= Hash.new(0)
Nun also darüber, wie man Subarrays bekommt
(3..5).to_a.product([2]).collect { |index| a[index] }
[2].product((3..5).to_a).collect { |index| a[index] }
(a..b).to_aläuft in O (n). Das Abrufen eines Elements von a Hashist fast O (1), daher läuft die Sammlung in fast O (n). Es gibt keine Möglichkeit, es schneller als O (n) zu machen, da das Kopieren von n Elementen immer O (n) ist.
Hasheskann Probleme haben, wenn sie zu groß werden. Ich würde also zweimal darüber nachdenken, eine solche Multidimensionale zu implementieren Array, wenn ich wüsste, dass meine Datenmenge immer größer wird.
x[3..8].each{|a|a[6] = 'something'}ist zu hässlich für dich.