2011-04-13 2 views
1

J'ai un tableau comme celui-cicomment appeler un élément d'un tableau multidimensionnel en ruby ​​

i = 0 
lines.each do |l| 
    array[i] = l.split(',') 
    i+=1 
end 

et je veux appeler $array[1][3] comme en php, mais il n'a pas travaillé. Je l'ai google pendant des heures maintenant, et ne peux pas trouver une solution.

+3

Lorsque vous dites "n'a pas fonctionné", vous ne nous avez pas dit quand vous aviez tort. Avez-vous reçu la mauvaise réponse, avez-vous vu un message d'erreur, votre ordinateur a-t-il explosé en une pluie d'éléphants violets? – Gareth

+1

sry j'ai eu une erreur liée à Windows, j'ai commencé mon ubuntu et cela a fonctionné mon chemin – Mikee

Répondre

2

d'abord quelques améliorations à votre codez:

# initialize your vars 
array = [] 
lines.each do |l| 
    array << l.split ',' # use the << operator 
end 

maintenant en rubis le symbole du dollar pour les tableaux n'est pas nécessaire, il désigne les variables globales et ce n'est pas bon de les utiliser.

Vous devriez accéder à votre variable comme ceci: array[1][3].

Vous pouvez rendre votre code une doublure en ruby1.9:

array = lines.each_line.map {|l| l.split ',' } 
+0

quel est le problème avec le ruby ​​1.8 façon? array = lines.collect {| l | l.split ','} – Simon

+0

@Simon rien de particulier, j'ai ajouté cela comme un refactor de bonus. Il est supposé que les lignes sont une chaîne qui pourrait aussi être réécrite pour 1.8.7 comme 'array = lines.split (" \ n "). Map {| l | l.split ','} '. –

0

Si votre problème est que l'appel array[6][3] retours quelque chose comme Error: method [] undefined for nil, faites ceci à la place:

array[6].to_a[3] 

Chaque fois que ce soit la rangée (6) ou la colonne (3) est hors de portée, elle renvoie nil. to_a garantit que, même lorsque la ligne est hors de portée, elle donne toujours un tableau vide de sorte que la recherche de la colonne ne renvoie pas d'erreur.

Questions connexes