J'apprends juste Ruby, alors je m'excuse si c'est trop débutant pour ici, mais je ne peux pas comprendre cela à partir du livre de pioche (probablement juste de ne pas lire assez attentivement). Quoi qu'il en soit, si j'ai un tableau comme celui-ci:
arr = [1,2,3,4,5]
... et je veux, disons, multiplier chaque valeur du tableau par 3, j'ai calculé cela en faisant 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 n'obtiens pas, c'est comment modifier le tableau d'origine à l'intérieur du bloc de code après l'itérateur. Je suis sûr que c'est très facile.
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), utilisezarr.map {|item| item*3}
. En fait, je réfléchis toujours à deux fois avant d'utilisereach
, car il y a généralement une fonction d'ordre supérieur commemap
,select
ouinject
qui fait ce que je veux.la source
arr.map!{ destructive_op}
changer de façon permanentearr
?arr.collect! {|item| item * 3}
la source