インデックス指定と反復処理
要素にアクセスし、ループ処理します。
「インデックス指定と反復処理」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
インデックスによる読み取り
ベクターの各要素には、インデックスと呼ばれる位置番号があります。インデックスは0から始まるため、最初の要素はインデックス0です。
角かっきを使って要素を読み取ります。たとえば、最初の値はv[0]で読み取れます。
fn main() {
let v = vec![100, 200, 300];
println!("first = {}", v[0]);
println!("third = {}", v[2]);
}範囲外アクセスによるパニック
ベクターの末尾を越えてインデックスでアクセスするとパニックが発生し、プログラムが停止します。長さ3のベクターで有効なインデックスは0、1、2だけです。
ここでv[5]を求めるとクラッシュするため、インデックスが必ず範囲内にあることを確認してください。
getによる安全なアクセス
getメソッドはパニックを起こさず、Optionを返します。インデックスが存在すればSome(value)、範囲外ならNoneが返ります。
これにより、存在しない要素を適切に処理できます。
fn main() {
let v = vec![1, 2, 3];
match v.get(5) {
Some(x) => println!("got {}", x),
None => println!("no such index"),
}
}要素数の確認
lenメソッドは要素数を返します。最後の有効なインデックスは常にlen - 1です。
長さがわかると、安全にループしたり、インデックスでアクセスする前に範囲を確認したりできます。
fn main() {
let v = vec![5, 6, 7, 8];
println!("length = {}", v.len());
println!("last = {}", v[v.len() - 1]);
}値のループ処理
すべての要素を順に処理する最もすっきりした方法は、ベクターへの参照を使ったforループです。&vを使うとベクターを借用するため、ループ後も利用できます。
各反復では、nに1つの要素への参照がバインドされます。
fn main() {
let v = vec![2, 4, 6];
for n in &v {
println!("value: {}", n);
}
}インデックス付きのループ
位置も必要な場合は、iter().enumerate()を呼び出します。各ステップで(index, value)のペアが生成されます。
番号付きの出力や、位置に応じたルールに最適です。
fn main() {
let v = vec!["a", "b", "c"];
for (i, item) in v.iter().enumerate() {
println!("{}: {}", i, item);
}
}各要素の変更
値をその場で変更するには、&mut vに対してループします。ベクターはmutでなければなりません。各nは可変参照なので、代入するには*でデリファレンスします。
ここではすべての要素を2倍にしています。
fn main() {
let mut v = vec![1, 2, 3];
for n in &mut v {
*n *= 2;
}
println!("{:?}", v);
}ベクターの合計
イテレーターを使うと計算が簡単になります。iter().sum()メソッドはすべての要素を合計します。
Rustが結果の型を知る必要があるため、合計値をi32として注釈します。
fn main() {
let v = vec![10, 20, 30];
let total: i32 = v.iter().sum();
println!("sum = {}", total);
}最初と最後の要素
first()とlast()メソッドは、ベクターの先頭と末尾へのOption参照を返します。ベクターが空の場合はNoneを返します。
これらを使うと、手動でのインデックス計算や範囲外アクセスによるクラッシュを避けられます。
fn main() {
let v = vec![7, 8, 9];
println!("{:?}", v.first());
println!("{:?}", v.last());
}containsによる検索
値が含まれているか確認するには、containsを使います。値への参照を受け取り、boolを返します。
ベクターを検索し、メンバーシップをすばやく確認できます。
fn main() {
let v = vec![3, 6, 9];
println!("has 6? {}", v.contains(&6));
println!("has 5? {}", v.contains(&5));
}範囲のスライス
スライスは、&v[1..3]のように範囲を使ってベクターの一部を借用します。開始位置は含まれ、終了位置は含まれません。
スライスを使うと、コピーせずに要素の一部分を扱えます。
fn main() {
let v = vec![10, 20, 30, 40];
let middle = &v[1..3];
println!("{:?}", middle);
}簡単な確認
インデックスによるアクセスとイテレーションについての理解を確認しましょう。
まとめ
インデックスで要素を読み取り、getで安全にアクセスし、for、enumerate、&mutでループする方法を学びました。
sum、first、last、contains、スライスも使いました。次はベクターのサイズを増減します。
よくある質問
「インデックス指定と反復処理」レッスンは無料ですか?
はい。「インデックス指定と反復処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「インデックス指定と反復処理」で何を学びますか?
要素にアクセスし、ループ処理します。 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「インデックス指定と反復処理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ベクターを作成して値を入れる
- インデックス指定と反復処理
- 拡張と縮小
- 構造体のベクター