Solidità - Array

Array è una struttura di dati, che memorizza una raccolta sequenziale di dimensioni fisse di elementi dello stesso tipo. Un array viene utilizzato per memorizzare una raccolta di dati, ma spesso è più utile pensare a un array come una raccolta di variabili dello stesso tipo.

Invece di dichiarare singole variabili, come numero0, numero1, ... e numero99, dichiari una variabile di matrice come numeri e utilizzi numeri [0], numeri [1] e ..., numeri [99] per rappresentare variabili individuali. Un elemento specifico in un array è accessibile da un indice.

In Solidity, un array può essere di dimensione fissa in fase di compilazione o di dimensione dinamica. Per l'array di archiviazione, può anche avere diversi tipi di elementi. In caso di array di memoria, il tipo di elemento non può essere mappato e nel caso in cui debba essere utilizzato come parametro di funzione, il tipo di elemento dovrebbe essere un tipo ABI.

Tutti gli array sono costituiti da posizioni di memoria contigue. L'indirizzo più basso corrisponde al primo elemento e l'indirizzo più alto all'ultimo elemento.

Dichiarazione di array

Per dichiarare un array di dimensioni fisse in Solidity, il programmatore specifica il tipo di elementi e il numero di elementi richiesti da un array come segue:

type arrayName [ arraySize ];

Questo è chiamato array monodimensionale. IlarraySize deve essere una costante intera maggiore di zero e typepuò essere qualsiasi tipo di dati Solidity valido. Ad esempio, per dichiarare un array di 10 elementi chiamato balance di tipo uint, utilizzare questa istruzione:

uint balance[10];

Per dichiarare un array di dimensioni dinamiche in Solidity, il programmatore specifica il tipo degli elementi come segue:

type[] arrayName;

Inizializzazione degli array

È possibile inizializzare gli elementi dell'array Solidity uno per uno o utilizzando una singola istruzione come segue:

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

Il numero di valori tra parentesi graffe [] non può essere maggiore del numero di elementi che dichiariamo per l'array tra parentesi quadre []. Di seguito è riportato un esempio per assegnare un singolo elemento dell'array:

Se ometti la dimensione dell'array, viene creato un array abbastanza grande da contenere l'inizializzazione. Pertanto, se scrivi -

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

Creerai esattamente lo stesso array che hai fatto nell'esempio precedente.

balance[2] = 5;

L'istruzione precedente assegna all'elemento numero 3 rd nell'array un valore di 5.

Creazione di array di memoria dinamici

Gli array di memoria dinamici vengono creati utilizzando una nuova parola chiave.

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

Accesso agli elementi dell'array

Si accede a un elemento indicizzando il nome dell'array. Questo viene fatto inserendo l'indice dell'elemento tra parentesi quadre dopo il nome dell'array. Ad esempio:

uint salary = balance[2];

L'istruzione precedente prenderà il 3 ° elemento dall'array e assegnerà il valore alla variabile salary. Di seguito è riportato un esempio, che utilizzerà tutti i tre concetti sopra menzionati vale a dire. dichiarazione, assegnazione e accesso agli array -

Membri

  • length- length restituisce la dimensione dell'array. length può essere utilizzato per modificare la dimensione dell'array dinamico impostandolo.

  • push- push consente di aggiungere un elemento a un array di archiviazione dinamico alla fine. Restituisce la nuova lunghezza dell'array.

Esempio

Prova il codice seguente per capire come funzionano gli array in 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);
   }
}