Menu
Coddy logo textTech

ベクタ要素へのアクセス

CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 10/66。

ベクタに要素が含まれたら、個々の値にアクセスする必要があります。Rustはベクタから要素を取得するための2つの異なるアプローチを提供しており、それぞれに利便性と安全性のトレードオフがあります。

最初の方法は、配列と同様に、角括弧を使用したインデックス構文を使用します:

let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // 10を取得
let third = numbers[2]; // 30を取得

この構文は馴染み深く簡潔ですが、重大なリスクがあります。存在しないインデックスにアクセスしようとすると、プログラムはパニックを起こしてクラッシュします:

let numbers = vec![10, 20, 30];
let invalid = numbers[5]; // これはパニックを起こします!

2番目の方法は、安全なアクセスを提供する.get()メソッドを使用します:

let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // Some(10)を返す
let invalid = numbers.get(5); // Noneを返す

.get()メソッドはOptionを返します。これは、インデックスが存在すればSome(value)を、存在しなければNoneを返すというものです。これにより、要素が存在しない可能性を処理することが強制され、クラッシュを防ぎ、コードの堅牢性が向上します。

challenge icon

チャレンジ

簡単

ベクタ numbers とインデックス idx を受け取り、安全なアクセスを使用してそのインデックスの要素を返す関数 get_element_at を作成してください。

要素に安全にアクセスするために .get() メソッドを使用してください。インデックスが存在する場合はその値を返し、存在しない場合はデフォルト値として -1 を返してください。

引数:

  • numbers (Vec<i32>): アクセスするベクタ
  • idx (i32): 取得するインデックス

戻り値: 指定されたインデックスの要素、またはインデックスが存在しない場合は -1 (i32)

チートシート

Rustはベクタの要素にアクセスするための2つのメソッドを提供しています:

角括弧を使用したインデックス構文

let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // 10を取得
let third = numbers[2]; // 30を取得

このメソッドは、インデックスが存在しない場合にパニックを引き起こします:

let invalid = numbers[5]; // これはパニックします!

安全なアクセスのための.get()メソッド

let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // Some(10)を返す
let invalid = numbers.get(5); // Noneを返す

.get()メソッドはOption型を返します。インデックスが存在する場合はSome(value)を、存在しない場合はNoneを返します。これによりクラッシュを防ぎ、欠落している要素の明示的な処理が必要になります。

自分で試してみよう

fn get_element_at(numbers: Vec<i32>, idx: i32) -> i32 {
    // ここにコードを書いてください
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン