93 votes

Comment puis-je modifier un tableau tandis que je suis à parcourir en Ruby?

Je suis en train d'apprendre Ruby alors, toutes mes excuses si c'est trop newbie pour ici, mais je ne peux pas faire ce travail à partir de la pioche livre (probablement juste de ne pas le lire attentivement assez). De toute façon, si j'ai un tableau comme ceci:

arr = [1,2,3,4,5]

...et je veux, dire, multiplier chaque valeur dans le tableau 3, j'ai travaillé que procédant de la manière suivante:

arr.each {|item| item *= 3}

...ne sera pas obtenir de moi ce que je veux (et je comprends pourquoi, je ne le modifie pas le tableau lui-même).

Ce que je ne comprends pas est comment faire pour modifier le tableau d'origine à partir de l'intérieur du bloc de code après l'itérateur. Je suis sûr que c'est très facile.

153voto

Mark Byers Points 318575

Utiliser map pour créer un nouveau tableau à partir de l'ancien:

arr2 = arr.map {|item| item * 3}

Utiliser map! de modifier le tableau en place:

arr.map! {|item| item * 3}

Voir en ligne: ideone

21voto

Chuck Points 138930

Pour modifier directement le tableau, utilisez arr.map! {|item| item*3}. Pour créer un nouveau tableau à partir de l'original (ce qui est souvent préférable), utilisez arr.map {|item| item*3}. En fait, je pense toujours à deux fois avant d'utiliser each, car habituellement, il y a une fonction d'ordre supérieur, comme map, select ou inject qu'est ce que je veux.

5voto

Jeff Richardson Points 31
arr.collect! {|item| item * 3}

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