Rustのfor文で数を1ずつ増やすのではなく2ずつ増やしたい(1つ飛ばしにしたい)場合の方法

今回の話は、私が「これどうやるんだろう?」と調べても中々出てこなかった内容でようやく解決したので備忘も兼ねて記します。

例えば、Rustのfor文は

for i in 0..10 {
    // something
}

のように書き、この時 iは「0, 1, 2, ..., 10」のように1ずつ増えていきます。

しかしながら状況によってはiを「0, 2, 4, ...」のように2ずつ増やしたい(1個飛ばしにした)場合もあったりします。

pythonでいう

for i in range(0, 10, 2):
    # something

みたいなことのRustバージョンです。

さて、この実現方法ですが、結論としては下記のように書きます。

for i in (0..10).step_by(2) {
    // something
}

こう書くことで0-10までが並んでいるRange構造体を、要素を1つ飛ばしに取得してくれるので「0, 2, 4, ...」のようなことが実現できます。

また、下記の書き方でも実現できます。

for i in (0..10).filter(|&n| n % 2 == 0) {
    // something
}

これは要素の中で偶数を抜き出すことで要素を1つ飛ばしに取得することを実現しています。(ただこれは0-10までが1ずつ並んでいるから実現できているだけなので良いやり方ではないと思いますが。。。)

今回は以上です!