Comment déclarer un tableau à deux dimensions en Ruby
Je veux un deux dimensions de la matrice en Ruby, que je puisse y accéder, par exemple comme ceci:
if @array[x][y] == "1" then @array[x][y] = "0"
Le problème est: je ne connais pas les montants initiaux des dimensions du tableau et je serai le tableau (avec le <<
opérateur).
Comment dois-je le déclarer comme une variable d'instance, si je n'obtiens pas d'erreur de ce genre?
undefined method `[]' for nil:NilClass (NoMethodError)
QUESTION À JOUR LE:
@array = Array.new {Array.new}
travaille maintenant pour moi, si le commentaire de Matt ci-dessous est correct!
Je viens de trouver la raison pour laquelle j'ai reçu le message d'erreur était que je itéré le tableau comme ceci:
for i in 0..@array.length
for j in 0..@array[0].length
@array[i][j] ...
qui était évidemment faux et produit l'erreur. Il doit être comme ceci:
for i in 0..@array.length-1
for j in 0..@array[0].length-1
@array[i][j] ...
Ruby utilise le typage dynamique-de sorte que vous n'avez pas besoin de "déclarer" qu'une variable est un tableau à deux dimensions à l'avant. Ce que vous pouvez faire est de créer une variable et initialiser un tableau. Ensuite, commencer à mettre des tableaux à l'intérieur d'elle.
pour array = Array.nouveau {Array.nouveau} doivent être modifiés pour tableau = Array.nouveau(3) {Tableau.nouveau(2)},doivent avoir le chiffre à l'intérieur
pour array = Array.nouveau {Array.nouveau} doivent être modifiés pour tableau = Array.nouveau(3) {Tableau.nouveau(2)},doivent avoir le chiffre à l'intérieur
OriginalL'auteur kadrian | 2012-02-04
Vous devez vous connecter pour publier un commentaire.
Une mise en œuvre simple pour un clairsemée tableau en 2 dimensions utilisant des tables de hachage, les
Utilisation:
rescue
en fournissant un bloc defetch
:hash.fetch(key){ hash[key] = {} }
sera beaucoup plus rapide. Aussi,hash[key] ||= {}
plus court et le plus couramment utilisé.A noté :-). L'extraction et de sauvetage a été inutile.
est-il possible d'avoir un .méthode de longueur pour chacune de ces dimensions?
Oui, voir le code mis à jour. En plus, vous pouvez également mixin Énumérable module et de remplacer chaque #pour obtenir plus de fonctionnalités.
OriginalL'auteur csherin
Matt commentaire sur votre question est tout à fait correcte. Toutefois, en se fondant sur le fait que vous avez marqués cette "conways-jeu-de-vie", il semble que vous essayez d'initialiser un tableau à deux dimensions, puis de les utiliser dans les calculs pour le jeu. Si vous voulais le faire en Ruby, une façon de le faire serait:
qui permettra de créer une my_x_size * my_y_size tableau rempli avec des zéros.
Ce que ce code n'est pour créer un nouveau Tableau de votre taille x, puis initialiser chaque élément de ce tableau à un autre Tableau de votre taille y, et initialiser chaque élément de chaque deuxième tableau avec des 0.
OriginalL'auteur Marc Talbot
Ruby
Array
ne vous donne pas cette fonctionnalité.Soit manuellement, vous faire:
Ou vous utilisez des hachages:
OriginalL'auteur Marc-André Lafortune