Rustでイテレータを得る方法

Rustを書いていて配列や文字列をmap()filter()など一つづつ処理したいときにイテレータを使いますが、元の型によって使うメソッドが違うので備忘を兼ねて残しておきます

配列やスライスの場合(例:[1, 2, 3]や&[1, 2, 3])

.iter()を使う

let arr = [1, 2, 3];
for item in arr.iter() {
    println!("{}", item);
}

その他にも以下のようなメソッドがある

  • .iter_mut():可変参照(&mut T)のイテレータ
  • .into_iter():所有権を移動するイテレータ

文字列(Stringや&str)

chars():文字単位のイテレータ(char型)

let s = "hello";
for c in s.chars() {
    println!("{}", c);
}
// 出力: h e l l o

chars()はユニコードスカラ値(char型)ごとのイテレートなので、マルチバイトの文字も正しく扱える

bytes():バイト単位のイテレータ(u8型)

let s = "hello";
for b in s.bytes() {
    println!("{}", b);
}
// 出力: 104 101 108 108 111

bytes()はバイト列なので、日本語などの非ASCII文字を含むと分割が不適切

.lines():行ごとのイテレータ

let s = "a\nb\nc";
for line in s.lines() {
    println!("{}", line);
}
// 出力: a b c

コメント

タイトルとURLをコピーしました