안녕하세요
오늘은 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를 구할 수 가 없습니다.
영상 참고 해주세요~