견고성-어레이
배열은 동일한 유형의 요소의 고정 크기 순차 컬렉션을 저장하는 데이터 구조입니다. 배열은 데이터 모음을 저장하는 데 사용되지만 배열을 동일한 유형의 변수 모음으로 생각하는 것이 더 유용합니다.
number0, number1, ..., number99와 같은 개별 변수를 선언하는 대신 숫자와 같은 하나의 배열 변수를 선언하고 numbers [0], numbers [1] 및 ..., numbers [99]를 사용하여 개별 변수. 배열의 특정 요소는 인덱스로 액세스됩니다.
Solidity에서 배열은 컴파일 타임 고정 크기 또는 동적 크기 일 수 있습니다. 스토리지 어레이의 경우 다른 유형의 요소도 가질 수 있습니다. 메모리 배열의 경우 요소 유형은 매핑 될 수 없으며 함수 매개 변수로 사용되는 경우 요소 유형은 ABI 유형이어야합니다.
모든 어레이는 연속적인 메모리 위치로 구성됩니다. 가장 낮은 주소는 첫 번째 요소에 해당하고 가장 높은 주소는 마지막 요소에 해당합니다.
배열 선언
Solidity에서 고정 크기의 배열을 선언하기 위해 프로그래머는 다음과 같이 배열에 필요한 요소 유형과 요소 수를 지정합니다.
type arrayName [ arraySize ];
이것을 1 차원 배열이라고합니다. 그만큼arraySize 0보다 큰 정수 상수 여야하며 type유효한 Solidity 데이터 유형이 될 수 있습니다. 예를 들어, uint 유형의 balance라는 10 개 요소 배열을 선언하려면 다음 명령문을 사용하십시오.
uint balance[10];
Solidity에서 동적 크기의 배열을 선언하기 위해 프로그래머는 다음과 같이 요소의 유형을 지정합니다.
type[] arrayName;
배열 초기화
다음과 같이 Solidity 배열 요소를 하나씩 또는 단일 문을 사용하여 초기화 할 수 있습니다.
uint balance[3] = [1, 2, 3];
중괄호 [] 사이의 값 수는 대괄호 [] 사이의 배열에 대해 선언 한 요소 수보다 클 수 없습니다. 다음은 배열의 단일 요소를 할당하는 예입니다.
배열의 크기를 생략하면 초기화를 저장할 수있을만큼 큰 배열이 생성됩니다. 따라서 다음과 같이 쓰면-
uint balance[] = [1, 2, 3];
이전 예제에서했던 것과 똑같은 배열을 만들 것입니다.
balance[2] = 5;
위의 명령문 은 배열의 3 번째 요소 에 값 5를 할당합니다 .
동적 메모리 배열 만들기
동적 메모리 배열은 new 키워드를 사용하여 생성됩니다.
uint size = 3;
uint balance[] = new uint[](size);
배열 요소에 액세스
배열 이름을 인덱싱하여 요소에 액세스합니다. 이는 배열 이름 뒤에 대괄호 안에 요소의 인덱스를 배치하여 수행됩니다. 예를 들면-
uint salary = balance[2];
위의 문은 배열에서 세 번째 요소를 가져와 급여 변수에 값을 할당합니다. 다음은 위에서 언급 한 세 가지 개념을 모두 사용하는 예입니다. 선언, 할당 및 액세스 배열-
회원
length− 길이는 배열의 크기를 반환합니다. length는 동적 배열의 크기를 변경하는 데 사용할 수 있습니다.
push− 푸시는 끝에 동적 스토리지 배열에 요소를 추가 할 수 있습니다. 배열의 새 길이를 반환합니다.
예
Solidity에서 배열이 어떻게 작동하는지 이해하려면 다음 코드를 시도하십시오.
pragma solidity ^0.5.0;
contract test {
function testArray() public pure{
uint len = 7;
//dynamic array
uint[] memory a = new uint[](7);
//bytes is same as byte[]
bytes memory b = new bytes(len);
assert(a.length == 7);
assert(b.length == len);
//access array variable
a[6] = 8;
//test array variable
assert(a[6] == 8);
//static array
uint[3] memory c = [uint(1) , 2, 3];
assert(c.length == 3);
}
}