今日來介紹 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]];
}
}
}