鉢本 一二のブログ

[Rust] iterでループする際、iterの開始を最初の要素ではない位置からスタートさせる

作成日 :
更新日 :
local_offer Rust

問題

fn main() {
    let a: Vec<i32> = (0..10).into_iter().collect();

    for iter in a {
        print!("{} ", iter);
    }
}

Rustをやっていると、ループの時には上記のような書き方になることをよく見かけたことがあると思う。
この場合、出力結果は

0 1 2 3 4 5 6 7 8 9

となる。
このようなループの時、iterは最初の要素がスタートとなるが最初の要素より後ろにある要素からスタートさせたい。

for (i, iter) in a.iter().enumerate(){
    if i == 0 {
        continue;
    }
    print!("{} ", iter);
}

という書き方も考えたが、要素番号は不要なのともうちょっと簡素な書き方があるだろうと書き方を模索していた。

環境

解決方法

fn main() {
    let a: Vec<i32> = (0..10).into_iter().collect();

    for iter in a[1..].into_iter() {
        print!("{} ", iter);
    }
}
1 2 3 4 5 6 7 8 9 

スライスで配列の開始位置を指定し into_iter() とすることで個人的によさげな感じになった。