LoginSignup
2
2

More than 1 year has passed since last update.

【solidity】mappingの使い方解説

Posted at

mappingとは

mappingとは、配列のようにkeyとvalueを紐づけて保管し、後から参照できるようにする型です。
参考までにドキュメントの引用です。

マッピング型は mapping(_KeyType => _ValueType) という構文で宣言します。_KeyType はどの基本型でも入ります。つまりどのビルトインの型に加え、bytes と string が使えます。ユーザー定義、もしくはコントラクト型、enum、マッピング、構造体、bytes と string を除いた配列は使用できません。_ValueType はマッピングを含めて、どの型でもとることができます。
引用元:https://solidity-jp.readthedocs.io/ja/latest/types.html#mapping-types

mappingの特徴および配列との違い

上記のドキュメントに書いてある点がほとんどですが、配列と違う点を挙げると以下の通り
①keyは入力した値のハッシュ値で保存される(厳密にはkeyは保存されてない?)
②valueからkeyを検索できない
③valueはnullを返すことはなく、無い場合は初期値を返す(これはsolidity自体の特徴?)
 (例:uintは"0",addressは"0x0",stringは"",boolは"false"
④マッピングは長さを持たない
⑤storageにデータが保存される

keyを入力してvalueを参照する点に関しては配列と同様だが、そもそも長さを持ってなかったりと違う点も多いようですね

コード

以下、ドキュメントのコードにコメントを追加しました

pragma solidity ^0.8.0;

contract MappingExample {
    //addressがkey、uintがvalue、balansesは格納する変数
    mapping(address => uint) public balances;

    //set関数により、key=msg.senderとvalue=newBalanceを紐づけてbalancesに格納する
    function set(uint newBalance) public {
        balances[msg.sender] = newBalance;
    }
    //readValue関数により、keyにmsg.senderを入力しvalueを参照する
    function readValue() public view returns (uint) {
        return balances[msg.sender];
    }
}

おわり

以上です。間違い等あればコメントにてご指摘ください。
ありがとうございます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2