안녕하세요
지난 시간에 이어, array를 다뤄 보려고 합니다.
배열은 타입 [] 접근제한자 변수명 이런식 으로 정의 됩니다
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec18{
uint256[] public ageArray;
}
위에 보시는 바와 같이 ageArray가 정의가 되었습니다.
배열은 mapping과 다르게 length 값을 구 할수 있습니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec18{
uint256[] public ageArray;
function AgeLength()public view returns(uint256) {
return ageArray.length;
}
}
배열에는 값을 넣거나 뺄수도 있답니다.
물론 다른 언어와 똑같이 인데스는 0 부터 시작한답니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec18{
uint256[] public ageArray;
function AgePush(uint256 _age)public{
ageArray.push(_age);
}
}
위에 AgePush는 배열인 ageArray 에 uin256 타입인 값을 넣어 준답니다.
예를들어 10 을 맨처음에 넣는다면 인데스 0 의 값은 10이 되겠네요.
만약에 인덱스 0의 값을 다시 수정하고 싶다면 밑의 코드 처럼 하면 된답니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec18{
uint256[] public ageArray;
function Agepush(uint256 _age)public{
ageArray.push(_age);
}
function AgeChange(uint256 _index, uint256 _age)public{
ageArray[_index] = _age;
}
}
AgeChange 처럼 배열의 특정 인덱스 값을 지목 해주고, 거기에 값을 넣어주면 됩니다.
여기서 주의 해야할점은 아직 배열이 생성되지도 않았는데 값을 넣으면 오류가 납니다.
예를들어, 현재 저희는 인데스 0에 10 이라는 값 만 넣었습니다.
그런데 저희가 AgeChange(11,55)를 한다면 에러가 납니다.
왜냐하면 배열의 인데스 11 은 아직 생성되지도 않았기때문이죠.
인제 배열의 값을 지워 볼게요,
지우는 방법은 두가지 예요,
Pop 과 delete 입니다.
Pop: 가장 최신의 값을 지운다/ length 도 줄어든다
예를 들어, |1|2|3|4| 라는 배열이 있다고 가정합니다.
현재 이 배열의 길이는 4 입니다.
그리고, 인데스는 0 부터 시작하니, 3 까지 있겠네요.
즉 인덱스 3 은 마지막 값인 4 를 나타 내겠죠.
그러면 저희가 Pop을 쓴다면, 마지막 값인 4 가 사라지고, 길이도 3 으로 줄어들게 됩니다.
delete : 원하는 인덱스의 값을 지운다, 그러나 length 는 줄어들지 않는다
delete를 쓰면 원하는 값에 0 이나 null 넣어서 기존의 값을 비워 줍니다, 그렇기때문에 길이는 줄어들지가 않아요.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec18{
uint256[] public ageArray;
function AgePop()public {
ageArray.pop();
}
function AgePop(uint256 _index)public {
delete ageArray[_index];
}
}
좀 더 나아가서,
애초에 배열값을, 미리 넣어주거나, 사이즈를 미리 넣어줘 제한을 걸수도 있습니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec18{
uint256[10] public ageFixedSizeArray;
string[] public nameArray= ["Kal","Jhon","Kerri"];
}
자 그러면 총 코드는 이렇게 된답니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract lec18{
uint256[] public ageArray;
uint256[10] public ageFixedSizeArray;
string[] public nameArray= ["Kal","Jhon","Kerri"];
function AgeLength()public view returns(uint256) {
return ageArray.length;
}
function AgePush(uint256 _age)public{
ageArray.push(_age);
}
function AgeChange(uint256 _index, uint256 _age)public{
ageArray[_index] = _age;
}
function AgeGet(uint256 _index)public view returns(uint256){
return ageArray[_index];
}
function AgePop()public {
ageArray.pop();
}
function AgePop(uint256 _index)public {
delete ageArray[_index];
}
}
영상 참고 해주세요