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