نگاشت ها (Mapping) به این گونه تعریف می شوند: mapping(keyType => valueType)
که در آن keyType می تواند هر نوع داده، بایت، رشته یا هر قراردادی باشد.
valueType هم می تواند هر نوع داده، نگاشت و آرایه هم باشد.
نگاشت ها قابل تکرار نیستند.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Mapping {
// نگاشت از آدرس یه عدد
mapping(address => uint) public myMap;
function get(address _addr) public view returns (uint) {
// نگاشت ها همیشه یک مقدار بازگشتی دارند.
// اگر مقادیر تعریف نشوند، مقادیر پیش فرض جایگزین می شوند.
return myMap[_addr];
}
function set(address _addr, uint _i) public {
// مقدار برای این آدرس را بروز می کند
myMap[_addr] = _i;
}
function remove(address _addr) public {
// مقدار را به مقدار پیش فرض بر میگرداند.
delete myMap[_addr];
}
}
contract NestedMapping {
// نگاشت های تو در تو (نگاشت از آدرس به نگاشتی دیگر)
mapping(address => mapping(uint => bool)) public nested;
function get(address _addr1, uint _i) public view returns (bool) {
//میتوانید مقادیر را از نگاشت های تو در تو بگیرید
// حتی زمانی که مقداردهی اولیه نشده باشد
return nested[_addr1][_i];
}
function set(address _addr1, uint _i, bool _boo) public {
nested[_addr1][_i] = _boo;
}
function remove(address _addr1, uint _i) public {
delete nested[_addr1][_i];
}
}
Solidity