-
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]; } }