Be lazy, Be crazy

Mapping && Iterable Mapping 본문

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로 저장하는 형식은 동일하다고 생각하고 공부를 진행했다.

반응형

'BlockChain > 솔리디티' 카테고리의 다른 글

STRUCT - 구조체  (0) 2022.05.07
Array Remove  (0) 2022.03.22
Array  (0) 2022.03.15
FunctionOutputs  (0) 2022.03.14
FunctionModifier  (1) 2022.03.13
Comments