J'apprends juste Ruby donc je m'excuse si c'est trop novice pour ici, mais je ne peux pas travailler cela à partir du livre de pioche (probablement juste ne pas lire assez attentivement). Quoi qu'il en soit, si J'ai un tableau comme ça:
arr = [1,2,3,4,5]
... et je veux, disons, multiplier chaque valeur du tableau par 3, j'ai calculé que faire ce qui suit:
arr.each {|item| item *= 3}
... ne m'obtiendra pas ce que je veux (et je comprends pourquoi, je ne modifie pas le tableau lui-même).
Ce que je ne comprends pas, c'est comment modifier le tableau d'origine depuis l'intérieur du bloc de code après l'itérateur. Je suis sûr que c'est très simple.
Utilisez map
pour créer un nouveau tableau à partir de l'ancien:
arr2 = arr.map {|item| item * 3}
Utilisation map!
pour modifier le tableau en place:
arr.map! {|item| item * 3}
Voyez-le travailler en ligne: ideone
Pour modifier directement le tableau, utilisez arr.map! {|item| item*3}
. Pour créer un nouveau tableau basé sur l'original (ce qui est souvent préférable), utilisez arr.map {|item| item*3}
. En fait, je réfléchis toujours à deux fois avant d'utiliser each
, car il y a généralement une fonction d'ordre supérieur comme map
, select
ou inject
qui fait ce que je veux .
arr.collect! {|item| item * 3}