Rust の配列
1. 配列 (Arrays)
配列は、各値に対して個別の変数を宣言する代わりに、複数の値を単一の変数に格納するために使用されます。
2. 配列の作成
配列を作成するには、角括弧 [ ] を使用し、値をカンマで区切ります。
注記: すべての値が同じデータ型(以下の例では整数型)であることを確認してください。
サンプルコード
let numbers = [1, 2, 3, 4, 5];これにより、5つの整数を持つ配列が作成されます。
3. 配列要素へのアクセス
配列の要素にアクセスするには、そのインデックス番号を参照します。
配列のインデックスは0から始まります。[0] が最初の要素、[1] が2番目の要素、となります。
以下のステートメントは、numbers の最初の要素 [0] の値にアクセスします。
サンプルコード
let numbers = [1, 2, 3, 4, 5];
println!("最初の数値は: {}", numbers[0]);4. 配列の値の変更
特定の要素の値を変更するには、インデックス番号を参照して新しい値を代入します。
配列を「ミュータブル(変更可能)」にする必要があることを忘れないでください(mut キーワードを使用します)。
サンプルコード
let mut numbers = [1, 2, 3, 4, 5];
numbers[0] = 10;
println!("新しい最初の数値は: {}", numbers[0]);5. 配列の長さ
.len() メソッドを使用すると、配列内の要素数を取得できます。
サンプルコード
let numbers = [1, 2, 3, 4, 5];
println!("この配列には {} 個の要素があります。", numbers.len());6. 配列のループ処理
for ループを使用して、配列の要素を反復処理できます。
サンプルコード
let fruits = ["apple", "banana", "orange"];
for fruit in fruits {
println!("私は {} が好きです。", fruit);
}7. 配列全体の出力
注記: 配列全体をプリントする場合は、println! の中で {:?} を使用する必要があります。
サンプルコード
let numbers = [1, 2, 3, 4, 5];
println!("{:?}", numbers);配列から1つの要素だけをプリントする場合は、{} を使用できます。
サンプルコード
let numbers = [1, 2, 3, 4, 5];
println!("{}", numbers[0]);7.1 まとめ
- 配列から単一の要素をプリントする場合は
{}を使用します。 - 配列全体をプリントする場合は
{:?}を使用します。
先ほどのループの例で {:?} を使用しなかった理由は、ループ内では配列から取り出した「単一の値」をプリントしているからです。各値は文字列(または数値)であるため、 {} が機能します。しかし、配列という構造体全体を出力するには {:?} が必要です。
基本的な型(文字列、数値、ブーリアンなど)には {} を使い、配列やベクタなどのデータ構造全体をプリントする場合には {:?} を使う、と覚えておくと良いでしょう。
8. 固定長(配列) vs 動的サイズ(ベクタ)
Rustの配列について語る際、「固定長(Fixed size)」と「動的サイズ(Dynamic size)」という用語をよく耳にするでしょう。
これは、Rustの配列が固定サイズであり、配列の作成後に要素を追加したり削除したりできないためです。
サンプルコード
// 3つの要素を持つ配列
let mut cars = ["Volvo", "BMW", "Ford"];
// cars配列に別の要素(4番目の要素)を追加しようとするとエラーになります
cars[3] = "Mazda"; // エラー: インデックスが範囲外(index out of bounds)です9. ベクタ - 動的サイズの例
配列要素の追加や削除が必要な操作には、サイズ変更可能な配列である ベクタ(Vectors) を使用できます。
ベクタのサイズは動的であり、必要に応じて拡張したり縮小したりできます。
ベクタを作成するには vec! マクロを使用します。
サンプルコード
// 3つの要素を持つベクタ
let mut cars = vec!["Volvo", "BMW", "Ford"];
// 要素を追加
cars.push("Mazda");
println!("{:?}", cars); // ["Volvo", "BMW", "Ford", "Mazda"]これはベクタに関する短い導入に過ぎません。詳細については、次章でさらに深く掘り下げていきます。