key와 value를 가지고있음
특정한 key를 넣으면, key에 해당하는 value값 return
like python의 dictionary라고 생각!
// SPDX-License-Identifier: MIT
pragma solidity >= 0.7.0 < 0.9.0;
contract makemapping
{
mapping(uint256=>uint256) private agelist;
// mapping 정의
// (key => value) : key를 uint로받아서, value값을 uint로 받겠다.
// mapping명 : agelist
mapping(string=>uint256) private pricelist;
// key가 string이고, value가 uint인 mapping
mapping(uint256=>string) private namelist;
// key가 uint이고, value가 string인 mapping
function setagelist(uint256 _index, uint256 _age) public
{
agelist[_index] = _age;
}
// key값과 value값을 mapping에 넣음
// func mapping : mapping명[key] = value
function getage(uint _index) public view returns(uint256)
{
return agelist[_index];
}
// value값을 return
//(uint => uint)인 mapping
//---------------------------------------------------------------//
function setnamelist(uint256 _index, string memory _name) public
{
namelist[_index] = _name;
}
function getname(uint _index) public view returns(string memory)
{
return namelist[_index];
}
//(uint => string)인 mapping
//---------------------------------------------------------------//
function setpricelist(string memory _itemname, uint256 _price) public
{
pricelist[_itemname] = _price;
}
function getprice(string memory _itemname) public view returns(uint256)
{
return pricelist[_itemname];
}
// (string => uint)인 mapping
}
mapping : length를 구할수 없지만, array는 length를 구할수 있음
array: loop를 이용하여 array를 iteration할수있음
but solidity에서는 array보다 mapping선호
why ? iteration이 DDOS공격에 취약하므로(이더리움 network와 gas적 과부화 발생가능)
mapping과 array에서 주의할점 :
만약에 mapping과 array에 특정값을 넣을때, num을 바꾼다고해서 mapping과 array가 변경되는것이아니라, 다시 최신화 시켜줘야함
// SPDX-License-Identifier: MIT
pragma solidity >= 0.7.0 < 0.9.0;
contract makearray
{
uint256[] public agearray;
// 배열생성
// type + [](배열을 나타내는 접근자) + public/private + 배열명
uint256[10] public fixedagearray;
// 배열의 length가 10을 제한하는 배열선언
string[] public namearray = ["me","and","you"];
// 배열을 선언할때, 미리 원소를 추가해서 선언할수도있다.
// namearray[0] = "me" | namearray[1] = "and" ...
agearray.length;
// array의 length값(uint)
agearray.push(_age);
// 배열의 type과 동일한 type의 값을 push로 넣을수있음
agearray[index];
// agearray[index]에 저장된 값 return
agearray.pop();
// agearray[agearray.length-1] 원소 삭제
delete agearray[index]
// agearray[index] = 0 으로 바껴지며, length또한 바뀌지않음
}