本講義では、Solidityにおけるハッシュテーブル:マッピング(Mapping)型について紹介します。
マッピング
マッピングでは、ユーザーはキー (Key) を介して対応する値 (Value) をクエリできます。たとえば、人の ID を介してウォレット アドレスをクエリします。
宣言マッピングの形式は、mapping(_KeyType => _ValueType) です。ここで、_KeyType と _ValueType は、それぞれ Key と Value の変数タイプです。例:
mapping(uint => address) public idToAddress; // id映射到地址
mapping(address => address) public swapPair; // 币对的映射,地址到地址
マッピングルール
- ルール 1 : マップされた _KeyType は、uint、address などの Solidity のデフォルト タイプのみを選択でき、カスタム構造体を使用することはできません。また、_ValueType はカスタム タイプを使用できます。次の例では、_KeyType がカスタム構造を使用しているため、エラーが報告されます。
// 我们定义一个结构体 Struct
struct Student{
uint256 id;
uint256 score;
}
mapping(Student => uint) public testVar;
- ルール 2 : マッピングの保存場所は、コントラクト状態変数、関数内の保存変数、およびライブラリ関数のパラメーターに使用できるように、ストレージである必要があります (例を。マッピングには関係 (キーと値のペア) が記録されるため、パブリック関数のパラメーターや戻り結果で使用することはできません。
- ルール 3 : マッピングがパブリックとして宣言されている場合、Solidity は自動的にゲッター関数を作成し、キーを介して対応する値をクエリできます。
- ルール 4 : マッピングに追加されるキーと値のペアの構文は、_Var[_Key] = _Value です。ここで、_Var はマッピング変数の名前であり、_Key と _Value は新しく追加されたキーと値のペアに対応します。例:
function writeMap (uint _Key, address _Value) public{
idToAddress[_Key] = _Value;
}
マッピングの原理
- 原則 1 : マッピングはキー (Key) 情報も長さ情報も保存しません。
- 原則 2 : マッピングは値にアクセスするためのオフセットとして keccak256 (キー) を使用します。
- 原則 3 : Ethereum ではすべての未使用領域を 0 として定義しているため、未割り当て (Value) キー (Key) の初期値は、各型のデフォルト値になります。たとえば、uint のデフォルト値は 0 です。
Remix で検証する (Mapping.sol を例として取り上げます)
- マッピング例 1 の展開
- マッピング例2 初期値
- マッピング例 3 キーと値のペア
要約する
今回の講義では、Solidityにおけるハッシュテーブルの使い方 - マッピング(Mapping)について紹介しました。ここまでで、一般的な変数の型をすべて学習しました。次に、制御フローの if-else、while などについて学習します。