Es gibt einige Probleme mit der zweidimensionalen Arrays
Implementierung.
a= [[1,2],[3,4]]
a[0][2]= 5
a[2][0]= 6
Hash
wie Array
Ich bevorzuge es Hashes
fü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 Hash
nicht 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_a
läuft in O (n). Das Abrufen eines Elements von a Hash
ist 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.
Hashes
kann 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.