견고한 매핑

Solidity의 매핑은 다른 언어의 해시 테이블이나 사전처럼 작동합니다.

mapping(key => value) <access specifier> <name>;


키는 값에 매핑됩니다. 데이터는 매핑에 저장되지 않고 해시 값만 저장됩니다.
  • 키: uint , bytes , string 와 같은 모든 내장 유형
  • 값: mapping , a dynamically sized array , contract를 포함한 모든 유형

  • 길이가 없고 매핑을 반복할 수 없습니다.
    예를 들어

    // mapping declaration
    mapping(uint => string )public people
    
    // update mapping
     people[10] = 'Mark'; // assigns a value
    people[12] = 'Andrew';
    
     // reading  values
    
    people[1] // reads a value
    
     people[unknown_key]    //will return the default value of the type, i.e '' for string or 0 for unint
    
    


    배열을 맵 값으로 할당
    배열을 맵에 값 유형으로 할당하고 아래와 같이 배열에 액세스할 수 있습니다.

    contract Mapping {
    
        mapping(address => uint[]) scores;    
    
        function manipulateArrayMap() external {
            scores[msg.sender].push(1);             //assign a value; 
            scores[msg.sender].push(2);             //assign another element
    
            scores[msg.sender][0];                  //access the element in the map array
    
            scores[msg.sender][1] = 5;              //update an element in the map array in index 1
    
            delete scores[msg.sender][0];           //delete the element in the index 0 of the map array
        }
    
    }
    


    다른 지도를 지도 값으로 할당
    또 다른 맵을 맵 값으로 할당하고 아래와 같이 맵에 액세스할 수 있습니다.

    contract Mapping {
    
        mapping(address => uint) balances;
        mapping(address => mapping(address => bool)) approved;
    
        function manipulateMapOfMap(spender) external {
            approved[msg.sender][spender] = true                     //assign a value to the approved map
            approved[msg.sender][spender];                           //get the value of the map
    
            delete approved[msg.sender][spender]                     //delete the reference
        }
    
    }
    


    일반적인 사용 사례
    고유한 이더리움 주소를 연관된 고유 값과 연결

    좋은 웹페이지 즐겨찾기