J'essaie de créer quelque chose qui nécessite un tableau à deux dimensions afin de choisir ce qui doit être affiché à l'écran, mais j'ai remarqué une certaine bizarrerie et je ne sais pas comment la contourner. Création d'un tableau 2d via Array.new
fait que toute tentative de définir une valeur dans un tableau imbriqué la définit dans tous les tableaux imbriqués.
a = Array.new(3, Array.new(3, 0)) #=> [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
a[1][1] = 1 #=> 1
a #=> [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
Cependant, créer le même tableau en spécifiant chaque valeur n'a pas le même comportement (et c'est ainsi que je m'attendais à ce que cela fonctionne).
b = [[0,0,0],[0,0,0],[0,0,0]] #=> [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
b[1][1] = 1 #=> 1
b #=> [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
Je ne sais pas exactement pourquoi cela se produit, et je n'arrive pas à trouver une meilleure façon de créer ce tableau, car spécifier chaque valeur individuelle prendrait une éternité. Pourquoi cela se produit-il, et comment puis-je l'éviter à l'avenir ?