ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mapping & Array & struct(구조체)
    Block-Chain/Solidity 2023. 1. 16. 23:40

    Solidity의 Mapping(맵핑), Array(배열), struct(구조체)에 대해 정리하였습니다.

     

     


    < Mapping >

    Mapping은 상자와 같으며 Key 와 Value값으로 이루어져 있습니다.

     

    • Mapping 정의 방법
    mapping(키의 타입 => 값의 타입) 접근제한자 변수이름

     

    Ex)

    contract lecture17 {
      mapping(uint256 => uint256) private list;
      
      function setList(uint256 _key, uint256 _value) public {
        list[_key] = _value;
      }
      
      function getListElement(uint256 _key) public view returns(uint256) {
        return list[_key];
      }
    }

    +. mapping은 length 내장함수가 없어 길이를 구할 수 없음.

     

     


    < Array >

    Array는 Mapping과 같이 상자처럼 값들을 저장하지만, key대신 index를 사용합니다.

    length 내장함수가 있어 Array의 길이를 알 수 있습니다.

     

    • Array 정의 방법
    타입[] 접근제한자 변수명

     

    Ex) 값  추가, 수정, 삭제, 미리 정의, 사이즈 제한

    contract lecture18 {
      uint256[] public ageArray;
      
      // 길이
      function ageLength() public view returns(uint256) {
        return ageArray.length;
      }
      
      // 값 조회
      function getAge(uint256 _index) public view returns(uint256) {
        return ageArray[_index];
      }
      
      // 값 추가
      function agePush(uint256 _age) public {
        ageArray.push(_age);
      }
     
      // 값 수정
      function changeAge(uint256 _index, uint256 _age) public {
        ageArray[_index] = _age;
      }
      
      // 값 삭제
      function agePop() public {
        ageArray.pop();
      }
      
      function deleteAge(uint256 _index) public {
        delete ageArray[_index];
      }
      
      // 사이즈 제한
      uint256[10] public ageFixedSizeArray;
      
      // 미리 정의
      string[] public nameArray= ["Kal","Jhon","Kerri"];
    }

    : pop()은 가장 마지막 인덱스 값 삭제 - length가 1 줄어듬

    : delete는 해당 인덱스 값을 0이나 null로 만듦 - length는 그대로

     

     


    < struct(구조체) >

    struct는 typescript의 Object + type과 같습니다. 자신만의 구조 및 타입 데이터가 필요할 때 사용합니다.

     

    • struct 정의 및 생성 방법
    // 정의 방법
    struct 구조체명 {
        타입 변수명,
        타입 변수명,
         .....
    }
    
    // 생성 방법
    구조체명(변수명, 변수명, ...);

     

    Ex)

    contract lecture20 {
      struct Character{
        uint256 age;
        string name;
        string job;
      }
      
      mapping(uint256 => Character) public CharacterMapping;
      Character[] public CharacterArray;
      
      function createCharacter(uint256 _age,string memory _name,string memory _job) pure public returns(Character memory) {
        return Character(_age,_name,_job);
      }
        
      function createChracterMapping(uint256 _key, uint256 _age,string memory _name,string memory _job )  public {
        CharacterMapping[_key] = Character(_age,_name,_job);
      }
        
      function getChracterMapping(uint256 _key)  public view returns(Character memory){
        return CharacterMapping[_key];
      }
        
      function createChracterArray(uint256 _age,string memory _name,string memory _job )  public {
        CharacterArray.push(Character(_age,_name,_job));
      }
        
      function getChracterArray(uint256 _index)  public view returns(Character memory){
        return CharacterArray[_index];
      }
    }

     

     

     

     

     

     

    'Block-Chain > Solidity' 카테고리의 다른 글

    에러 핸들러  (0) 2023.03.07
    조건문 & 반복문  (0) 2023.02.15
    상속 & 이벤트  (0) 2023.01.05
    Instance  (0) 2022.12.28
    Function  (0) 2022.12.26

    댓글

Designed by Tistory.