rubyでループ中に配列の要素を消すと全部見てくれない問題

f:id:panchiga:20150531002115p:plain

はじめに

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を使えば幸せ。

やったね。

gist78fc964f3e034b8b0d81

出力結果は

1 4 

感想

神の作ったと思っていたruby様も人が作ったものなんだなって感じた。いや、神はこんな書き方をしないから凡人が合わせるしかないのかもしれない。

何はともあれ解決できてよかった。

前の記事の続きのモーターを動かす奴はしばらく触ってない。