0Pricing
Learn Rust Coding · レッスン

コレクションの反復処理

forとイテレーター

「コレクションの反復処理」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

forによるループ

forループは、コレクションの各要素を調べる最も簡単な方法です。

fn main() {
    let nums = vec![1, 2, 3];
    for n in &nums {
        println!("{}", n);
    }
}

範囲のループ

範囲は、反復処理できるシーケンスを生成します。1..5は終端を含まず、1..=5は終端を含みます。

fn main() {
    for i in 1..=3 {
        println!("i = {}", i);
    }
}

iterメソッド

.iter()を呼び出すと、各要素への参照を生成するイテレーターが作成されます。イテレーターは消費されるまで遅延評価されます。

fn main() {
    let v = vec![10, 20, 30];
    let mut it = v.iter();
    println!("{:?}", it.next());
    println!("{:?}", it.next());
}

反復処理の3つの方法

ベクターには3種類の反復処理方法があります:

  • iter() — &Tを生成します(借用)。
  • iter_mut() — &mut Tを生成します(可変借用)。
  • into_iter() — Tを生成します(所有権を取得)。
fn main() {
    let v = vec![1, 2, 3];
    for x in v.into_iter() {
        println!("owned {}", x);
    }
}

mapによる変換

mapは各要素にクロージャを適用し、新しいイテレーターを生成します。結果を集めるにはcollectを使います。

fn main() {
    let v = vec![1, 2, 3];
    let squared: Vec<i32> = v.iter().map(|x| x * x).collect();
    println!("{:?}", squared);
}

filterによる選択

filterは、クロージャがtrueを返す要素だけを残します。

fn main() {
    let v = vec![1, 2, 3, 4, 5];
    let odds: Vec<i32> = v.into_iter().filter(|x| x % 2 == 1).collect();
    println!("{:?}", odds);
}

sumとcountによる集計

消費メソッドは、イテレーターをsum、count、max、minなどの単一の値に集約します。

fn main() {
    let v = vec![4, 8, 15, 16];
    let total: i32 = v.iter().sum();
    let how_many = v.iter().count();
    println!("sum {} count {}", total, how_many);
}

アダプターのチェーン

イテレーターメソッドは、明確なパイプラインとしてチェーンできます。最終的に消費されるまで、各ステップでストリームを変換します。

fn main() {
    let v = vec![1, 2, 3, 4, 5, 6];
    let result: i32 = v.iter()
        .filter(|x| *x % 2 == 0)
        .map(|x| x * 10)
        .sum();
    println!("{}", result);
}

インデックス用のenumerate

enumerateは各要素にインデックスを組み合わせ、(index, value)というタプルを生成します。

fn main() {
    let letters = vec!['a', 'b', 'c'];
    for (i, ch) in letters.iter().enumerate() {
        println!("{}: {}", i, ch);
    }
}

HashMapの反復処理

イテレーターはマップにも使えます。ループするとキーと値のタプルが生成されます。

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("a", 1);
    m.insert("b", 2);
    for (k, v) in &m {
        println!("{} -> {}", k, v);
    }
}

forとイテレーターメソッドの比較

通常のforループは、出力などの副作用を行うのに適しています。イテレーターアダプター(map、filter、sum)は、データを新しい値に変換するときに力を発揮します。

fn main() {
    let v = vec![2, 4, 6];
    let doubled: Vec<i32> = v.iter().map(|x| x * 2).collect();
    for x in &doubled {
        println!("{}", x);
    }
}

簡単な確認

イテレーターアダプターの役割を思い出してください。

まとめ

Rustでコレクションを反復処理する方法:

  • 単純なループにはfor x in &collectionを使います。
  • iter、iter_mut、into_iterで借用を制御します。
  • アダプター:map、filter、enumerate。
  • コンシューマー:collect、sum、count、max。
fn main() {
    let prices = vec![10, 25, 40];
    let with_tax: Vec<i32> = prices.iter().map(|p| p + p / 5).collect();
    let total: i32 = with_tax.iter().sum();
    println!("{:?} total {}", with_tax, total);
}

よくある質問

「コレクションの反復処理」レッスンは無料ですか?

はい。「コレクションの反復処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「コレクションの反復処理」で何を学びますか?

forとイテレーター ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「コレクションの反復処理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ベクター
  2. Stringと&str
  3. HashMap
  4. コレクションの反復処理
← Learn Rust Codingに戻る