Solidity Minimalist #7. マッピング タイプ

本講義では、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 などについて学習します。

おすすめ

転載: blog.csdn.net/u010359479/article/details/128870337