견고성-어레이

배열은 동일한 유형의 요소의 고정 크기 순차 컬렉션을 저장하는 데이터 구조입니다. 배열은 데이터 모음을 저장하는 데 사용되지만 배열을 동일한 유형의 변수 모음으로 생각하는 것이 더 유용합니다.

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