BlockChain/솔리디티
Array
정신이 많이없는 개발자
2022. 3. 15. 00:06
728x90
반응형
솔리디티에서 Array는 어떤형식으로 작성되는지 간단하게 알아보는 글이다.
### 내가생각하기에 중요한 점은 어떻게 memory 배열에 크기를 설정하고 값을 담는지가 중요한것 같다.
### 기본적으로 동적으로 배열크기를 만들 수 있고 VS 고정적으로 배열의 크기를 지정할 수있다.
### 다른 언어와 마찬가지로 배열 크기를 설정하고 값을 집어넣는 방식은 어렵지 않다.
### 배열변수이름.push(인자) 다른 언어에서 보는것과 마찬가지로 비슷한 형태
배열변수이름.pop() 맨 마지막 인자가 사라진다.
### 다른 언어와 다르게 delete 라는 함수를 사용할 수 있고 할당되어 있는 값을 0으로 초기화 시킨다.
### 보통배열은 storage에 저장이 되는데 함수안에서 memory형태로 배열을 선언할 수 있다.
내가 공부한 내용에서는 크기가 지정되어있어야하고. 일반적인 push형태로 값을 저장할 수가 없다.
그래서 배열변수이름[0] = value; 이런식으로 값을 지정해 줘야했다.
### 배열 memory를 생성할 때는 필요한 크기만큼 지정해주는것이 gas 사용을 절약할 수 있다.
### 아래 코드 참조
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
//Array - dynamic or fixed size
// Initialization
// Insert(push), get, update, delete, pop length
//Creating array in memory
// Returning array from function
contract Array {
uint[] public nums = [1,2,3];
uint[3] public numsFixed = [1,2,3];
function examples() external {
nums.push(4); //[1,2,3,4]
uint x = nums[1];
nums[2] = 777; // [1,2, 777, 4]
delete nums[1]; // [1, 0, 777, 4]
nums.pop(); // [1,0,777]
uint len = nums.length;
//create array in memory
uint[] memory a = new uint[](5);
//a.pop();
//a.push();
a[0] = 1;
}
function returnArray(uint[] memory b) external pure returns (uint[] memory){
uint[] memory a = new uint[](b.length);
//a.pop();
//a.push();
for(uint i=0; i<b.length; i++){
a[i] = b[i];
}
return a;
}
}
반응형