Rubyを学んでいるので、これがあまりにも初心者の場合はおaびしますが、つるはしの本からこれを解決することはできません(おそらく十分に注意深く読んでいないだけです)。私は次のような配列を持っています:
arr = [1,2,3,4,5]
...そして、たとえば、配列内の各値に3を掛けたいと思います。
arr.each {|item| item *= 3}
...私が欲しいものを取得しません(そして、私は配列自体を変更していない理由を理解しています)。
取得できないのは、イテレータの後にコードブロック内から元の配列を変更する方法です。これは非常に簡単だと思います。
map
を使用して、古い配列から新しい配列を作成します。
arr2 = arr.map {|item| item * 3}
つかいます map!
配列を適切に変更するには:
arr.map! {|item| item * 3}
オンラインで動作することを確認してください: ideone
配列を直接変更するには、arr.map! {|item| item*3}
を使用します。元の(多くの場合望ましい)ベースの新しい配列を作成するには、arr.map {|item| item*3}
を使用します。実際、each
を使用する前に常に考え直します。通常、map
、select
、またはinject
のような高階関数があり、それが必要なことを行うからです。 。
arr.collect! {|item| item * 3}