Solidność - tablice

Tablica to struktura danych, która przechowuje sekwencyjną kolekcję elementów tego samego typu o stałym rozmiarze. Tablica jest używana do przechowywania zbioru danych, ale często bardziej przydatne jest myślenie o tablicy jako o zbiorze zmiennych tego samego typu.

Zamiast deklarować pojedyncze zmienne, takie jak liczba0, liczba1, ... i liczba99, deklarujesz jedną zmienną tablicową, taką jak liczby, i używasz liczb [0], liczb [1] i ..., liczb [99] do reprezentowania indywidualne zmienne. Dostęp do określonego elementu w tablicy uzyskuje się za pomocą indeksu.

W Solidity tablica może mieć stały rozmiar w czasie kompilacji lub rozmiar dynamiczny. W przypadku macierzy pamięci masowej może mieć również różne typy elementów. W przypadku tablicy pamięci, typ elementu nie może być mapowany i w przypadku, gdy ma być używany jako parametr funkcji, typ elementu powinien być typem ABI.

Wszystkie tablice składają się z ciągłych lokalizacji pamięci. Najniższy adres odpowiada pierwszemu elementowi, a najwyższy adres ostatniemu elementowi.

Deklarowanie tablic

Aby zadeklarować tablicę o stałym rozmiarze w Solidity, programista określa typ elementów i liczbę elementów wymaganych przez tablicę w następujący sposób -

type arrayName [ arraySize ];

Nazywa się to tablicą jednowymiarową. PlikarraySize musi być stałą liczbą całkowitą większą od zera i typemoże być dowolnym prawidłowym typem danych Solidity. Na przykład, aby zadeklarować 10-elementową tablicę o nazwie balance typu uint, użyj tej instrukcji -

uint balance[10];

Aby zadeklarować tablicę dynamicznych rozmiarów w Solidity, programista określa typ elementów w następujący sposób -

type[] arrayName;

Inicjowanie tablic

Możesz zainicjować elementy tablicy Solidity pojedynczo lub używając pojedynczej instrukcji w następujący sposób -

uint balance[3] = [1, 2, 3];

Liczba wartości w nawiasach klamrowych [] nie może być większa niż liczba elementów, które zadeklarujemy w tablicy w nawiasach kwadratowych []. Poniżej znajduje się przykład przypisywania pojedynczego elementu tablicy -

Jeśli pominiesz rozmiar tablicy, zostanie utworzona tablica wystarczająco duża, aby pomieścić inicjalizację. Dlatego jeśli napiszesz -

uint balance[] = [1, 2, 3];

Utworzysz dokładnie taką samą tablicę, jak w poprzednim przykładzie.

balance[2] = 5;

Powyższy wyznacza rachunku, numer elementu 3 rd w tablicy wartość 5.

Tworzenie dynamicznych tablic pamięci

Dynamiczne tablice pamięci są tworzone przy użyciu nowego słowa kluczowego.

uint size = 3;
uint balance[] = new uint[](size);

Dostęp do elementów tablicy

Dostęp do elementu uzyskuje się poprzez indeksowanie nazwy tablicy. Odbywa się to poprzez umieszczenie indeksu elementu w nawiasach kwadratowych po nazwie tablicy. Na przykład -

uint salary = balance[2];

Powyższe stwierdzenie zajmie 3 rd elementu z tablicy i przypisać wartość do zmiennej wynagrodzenia. Poniżej znajduje się przykład, który będzie wykorzystywał wszystkie wyżej wymienione trzy koncepcje, a mianowicie. deklaracja, przypisanie i dostęp do tablic -

Członkowie

  • length- length zwraca rozmiar tablicy. length może służyć do zmiany rozmiaru tablicy dynamicznej podczas jej ustawiania.

  • push- push pozwala na zakończenie dołączyć element do tablicy dynamicznej. Zwraca nową długość tablicy.

Przykład

Wypróbuj poniższy kod, aby zrozumieć, jak działają tablice w 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);
   }
}