상세 컨텐츠

본문 제목

솔리디티 강좌 17강 Mapping

솔리디티 깨부수기 - 기본

by D_One 2021. 9. 17. 10:13

본문

 

 

안녕하세요

 

오늘은 Mapping에 대해서 다뤄 보려고 합니다.

 

Mapping 에는 Key 와 Value 값이 존재 한답니다.

 

Mapping은 마치 어느 상자에 Key 를 넣어주면 Value 값 튀어 나온답니다.

 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract lec17{
    mapping(uint256=>uint256) private ageList;
    
    
}

이런식으로 정의를 할 수 가 있습니다.

mapping( 키의 타입 => 값의 타입) 접근제한자 변수이름  이런식으로 정의가 가능합니다.

 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract lec17{
    mapping(uint256=>uint256) private ageList;
    
    
    function setAgeList(uint256 _index,uint256 _age) public {
        ageList[_index] = _age;
    }
    
    function getAge(uint256 _index) public view returns(uint256){
        return ageList[_index];
    }
  
    
}

위와 같이  setAgeList 처럼 mapping 의 키값과 벨류값을 넣어 줄 수 있습니다. 

그리고 반환시 getAge 처럼 해주면 된답니다. 

 

좀 더 나아가서, key 와 value의 타입 다른 mapping 들을 만들수도 있습니다.

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;


contract lec17{
    mapping(string=>uint256) private priceList;
    mapping(uint256=>string) private nameList;
    mapping(uint256=>uint256) private ageList;
    
    
    function setAgeList(uint256 _index,uint256 _age) public {
        ageList[_index] = _age;
    }
    
    function getAge(uint256 _index) public view returns(uint256){
        return ageList[_index];
    }
    
}

그리고 마찬가지로 priceList 와 nameList 에도 get 과 set 함수를 동일하게 만들어줄 수 있습니다.

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;


contract lec17{
    mapping(string=>uint256) private priceList;
    mapping(uint256=>string) private nameList;
    mapping(uint256=>uint256) private ageList;
    
    
    function setAgeList(uint256 _key,uint256 _age) public {
        ageList[_key] = _age;
    }
    
    function getAge(uint256 _key) public view returns(uint256){
        return ageList[_key];
    }
    
    function setNameList(uint256 _key,string memory _name) public {
        nameList[_key] = _name;
    }
    
    function getName(uint256 _key) public view returns(string memory){
        return nameList[_key];
    }
    
    function setPriceList(string memory _itemName,uint256 _price) public {
        priceList[_itemName] = _price;
    }
    
    function getPriceList(string memory _key) public view returns(uint256){
        return priceList[_key];
    }
    
}

참고로 mapping 은 length 내장함수가 없기에 length를 구할 수 가 없습니다.

 

영상 참고 해주세요~

관련글 더보기