51 votes

serie multidimensionnelle

Le problème est peut-être simplement dû à mon manque de capacité à trouver des éléments ici, mais je ne trouve rien sur la création de tableaux multidimensionnels dans Ruby.

Quelqu'un pourrait-il s'il vous plaît me donner un exemple sur la façon de le faire?

44voto

Veger Points 17657

Strictement parlant, il n'est pas possible de créer de multiples dimensions des tableaux en Ruby. Mais il est possible de mettre un tableau dans un autre tableau, qui est presque la même que sur un multi-dimensionnelle tableau.

C'est comment vous pouvez créer un tableau 2D en Ruby:

a = [[1,2,3], [4,5,6], [7,8,9]]


Comme indiqué dans les commentaires, vous pouvez également utiliser NArray qui est un Ruby numérique de la matrice de la bibliothèque:

require 'narray'
b = NArray[ [1,2,3], [4,5,6], [7,8,9] ]

Utiliser a[i][j] pour accéder aux éléments du tableau. Fondamentalement, a[i] retourne le sous-tableau " stockés sur la position i de a et ainsi a[i][j] retourne le nombre d'élément j à partir de la matrice qui est stocké sur la position i.

23voto

Orlando Points 3184

vous pouvez passer un bloc à Array.new

 Array.new(n) {Array.new(n,default_value)}
 

la valeur qui retourne le bloc sera la valeur de chaque index du premier tableau,

alors..

 Array.new(2) {Array.new(2,5)} #=> [[5,5],[5,5]]
 

et vous pouvez accéder à ce tableau en utilisant array[x][y]

également pour la deuxième instanciation de tableau, vous pouvez également passer un bloc comme valeur par défaut. alors

 Array.new(2) { Array.new(3) { |index| index ** 2} } #=> [[0, 1, 4], [0, 1, 4]]
 

3voto

kipar Points 121

La méthode donnée ci-dessus ne fonctionne pas.

 n = 10
arr = Array.new(n, Array.new(n, Array.new(n,0.0))) 
arr[0][1][2] += 1
puts arr[0][2][2]
 

est équivalent à

 n = 10
a = Array.new(n,0.0)
b = Array.new(n,a)
arr = Array.new(n, b) 
arr[0][1][2] += 1
puts arr[0][2][2]
 

et affichera 1.0, pas 0.0, car nous modifions le tableau a et imprimons l’élément du tableau a.

1voto

Kri-ban Points 203

En réalité, cela est beaucoup plus rapide que la méthode de bloc donnée ci-dessus:

 arr = Array.new(n, Array.new(n, Array.new(n,0.0))) 

arr[0][1][2] += 1
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X