Solidity - Mapping & Array

RedTiger·2023년 10월 6일

Blockchain

목록 보기
4/7

[Mapping]

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
}

[Array]

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또한 바뀌지않음
}
profile
Communication & SW

0개의 댓글