Move言語において、vector<T>は提供されている唯一のプリミティブなコレクション型。
プリミティブなコレクション型とは、プログラミング言語が基本的に提供しているデータ構造の一種で、複数のデータ要素をまとめて管理するための型を指します。これらは言語のコア部分に組み込まれており、追加のライブラリやフレームワークを必要とせずに使用できる基本的な型です。
一般的に、プリミティブなコレクション型には以下のようなものがあります:
- 配列(Array) - 固定サイズまたは動的サイズで、同一のデータ型の要素を連続したメモリ領域に格納します。
- リスト(List) - サイズが動的に変更可能で、要素の追加や削除が容易です。
- ベクター(Vector) - リストに似ていますが、通常は動的な配列として実装され、配列よりも柔軟な操作が可能です。
- セット(Set) - 重複を許さない要素のコレクションで、主に要素の存在チェックに特化しています。
- 辞書(Dictionary)またはハッシュマップ(HashMap) - キーと値のペアでデータを格納し、キーによる高速なデータアクセスを提供します。
これらの型は、データの格納、検索、ソート、フィルタリングなどの基本的な操作をサポートし、プログラムでのデータ処理を効率化します。Move言語においては、
vector<T>がこのようなプリミティブなコレクション型の一例として提供されており、任意の型Tの要素を動的に管理するための手段となっています。
vector<T>は型Tの要素だけを含む均一なコレクションであり、"end"(末尾)から値を追加(プッシュ)または削除(ポップ)することで、サイズを増減できる。
vector<T>は任意の型Tでインスタンス化することができる。
例えば、vector<u64>(64ビット符号なし整数のベクタ)、vector<address>(アドレスのベクタ)、vector<0x42::MyModule::MyResource>(特定のモジュールのリソース型のベクタ)、vector<vector<u8>>(8ビット符号なし整数のベクタのベクタ)などがすべて有効なベクタ型として扱われる。
このように、vector<T>は多様な型のコレクションを柔軟に扱うことが可能で、プログラム内でのデータ構造の管理を効率的に行うための重要なツール。
| 構文 | タイプ | 説明 |
|---|---|---|
vector[] |
vector[]: vector<T>T単一の非参照型 |
空のベクトル |
vector[e1, ..., en] |
vector[e1, ..., en]: vector<T>ここで、 e_i: Tst0 < i <= nとn > 0 |
n要素(長さn)を持つベクトル |
vector<T>[]: vector<T>
vector<T>[e1, ..., en]: vector<T>
(vector[]: vector<bool>);
(vector[0u8, 1u8, 2u8]: vector<u8>);
(vector<u128>[]: vector<u128>);
(vector<address>[@0x42, @0x100]: vector<address>);
vector<u8>リテラルvector<u8>は、"バイト配列"を表すために一般的に使用される。vector<u8>型で表され、公開鍵やハッシュ結果などの暗号学的な用途で頻繁に使用される。u8値を数値形式で指定する必要があるvector[]を使う代わりに、より読みやすい特定の構文が提供されている。vector<u8>リテラルにはバイト文字列とヘックス文字列の二つの形式がサポートされている。bをプレフィックスとする引用符で囲まれた文字列リテラル。b"Hello!\\\\n"のように記述します。