今日來介紹 Mapping Types

Mapping Types

它其實就是一個一般語言裡面的 hash table。它就是一個動態的陣列,key 裡面的東西不支援 enum & struct,value 裏面支援所有型別,也可以在自己包一個 mapping進去。

先來看看語法

//很標準的 key string , value uint的 map
mapping(string => uint) public wallet;

//mapping 包 mapping的寫法
mapping(string =>mapping(string=>uint)) public test;

//設定 mapping 裏面得值
wallet['syhlion']=100

//取mapping裏面得值
uint money = wallet['syhlion']

那目前 mapping 不支援 iterable,這邊有一個簡單的東西可以實作 iterable

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

contract MappingIterableExample {

    //先定義一個mapping 
    mapping(string => uint) public wallet;

    // 再用mapping的key值 多定義一個相同type的 array
    string[] usernames;


    //每次新增時,再array 同步把key push進去
    function add(string username, uint amount) public {
        usernames.push(name);
        wallet[username] = amount;
    }

    function iterable() public {
        for (uint i = 0; i< usernames.length; i++) {
            // 透過 iterable array,來取 mapping得值
            uint amount = wallet[usernames[i]];
        }
    }

}