BlockChain/솔리디티
Mapping && Iterable Mapping
정신이 많이없는 개발자
2022. 3. 22. 22:57
728x90
반응형
저번시간에는 반복문과 반복문에서 값을 제거하는 방식을 공부했습니다. 전 post를 참고하시면 됩니다.
이번 post에서는 간단하게 자주사용하는 mapping과 이 mapping을 읽어오는 방식에 대해서 공부를 해보았습니다.
// Mapping
// How to declare a mapping (simple and nested);
// Set, get, delete
contract Mapping {
mapping(address => uint) public balances;
mapping (address => mapping(address => bool)) public isFriend;
function examples() external {
balances[msg.sender] = 123;
uint bal = balances[msg.sender];
uint bal2 = balances[address(1)]; // 0
balances[msg.sender] += 456; // 123 + 456;
delete balances[msg.sender]; // delete는 기본값을로 변환시킨다. 고로 0이된다.
isFriend[msg.sender][address(this)] = true;
}
}
contract IterableMapping {
mapping(address => uint) public balances;
mapping(address => bool) public inserted;
address[] public keys;
function set(address _key, uint _val) external {
balances[_key] = _val;
if(!inserted[_key]){
inserted[_key] = true;
keys.push(_key);
}
}
function getSize() view external returns(uint){
return keys.length;
}
function first() view external returns(uint){
return balances[keys[0]];
}
function last() view external returns(uint){
return balances[keys[keys.length-1]];
}
function get(uint i) view external returns(uint){
return balances[keys[i]];
}
}
나는 mapping을 JS에서 객체와 같은형태로 이해를 했다.
JS에서 객체형태의 값을 변환 할때 const test = {name: 'jun'} 을 test.name = 'ahn' 변경이 가능하듯이
mapping도 비슷한 형태로 mapping(address => uint) public balances; balances[address(1)] = 123; 변경 가능
이렇듯 사용하는 방식은 다르지만 key-value로 저장하는 형식은 동일하다고 생각하고 공부를 진행했다.
반응형