rubyでループ中に配列の要素を消すと全部見てくれない問題
はじめに
ruby使ってて配列の要素がいらない値だったら消去したいなって思った。
each使ってやったら最終的に配列の中は思ってた値とは違った値が取れてなんだこれってなったので書いた。
コードと動作
gist56ee98442dc747b26f67
このコードで望んだ出力結果は
1 4
だけど実際は
1 3 4
あれ?3消えて無くない??
ちなみに.each
のところを.times
に書き換えても同じ。
原因
[1,2,3,4]
から2
を削除したら[1,3,4]
となる。
だけどカウンタの値は2のまま。次に進んだら新しい配列の3つ目、つまり4を見てしまうためだと思われる。
解決策
.each
が先頭から順に見ていくので、後ろから見ていく.reverse_each
を使えば幸せ。
やったね。
出力結果は
1 4
感想
神の作ったと思っていたruby様も人が作ったものなんだなって感じた。いや、神はこんな書き方をしないから凡人が合わせるしかないのかもしれない。
何はともあれ解決できてよかった。
前の記事の続きのモーターを動かす奴はしばらく触ってない。