Solidité - Tableaux

Array est une structure de données, qui stocke une collection séquentielle de taille fixe d'éléments du même type. Un tableau est utilisé pour stocker une collection de données, mais il est souvent plus utile de considérer un tableau comme une collection de variables du même type.

Au lieu de déclarer des variables individuelles, telles que nombre0, nombre1, ... et nombre99, vous déclarez une variable de tableau telle que des nombres et utilisez les nombres [0], les nombres [1] et ..., les nombres [99] pour représenter variables individuelles. Un élément spécifique d'un tableau est accessible par un index.

Dans Solidity, un tableau peut être de taille fixe au moment de la compilation ou de taille dynamique. Pour la baie de stockage, elle peut également avoir différents types d'éléments. Dans le cas d'un tableau de mémoire, le type d'élément ne peut pas être mappé et s'il doit être utilisé comme paramètre de fonction, le type d'élément doit être un type ABI.

Tous les tableaux sont constitués d'emplacements de mémoire contigus. L'adresse la plus basse correspond au premier élément et l'adresse la plus élevée au dernier élément.

Déclaration de tableaux

Pour déclarer un tableau de taille fixe dans Solidity, le programmeur spécifie le type des éléments et le nombre d'éléments requis par un tableau comme suit -

type arrayName [ arraySize ];

C'est ce qu'on appelle un tableau à une seule dimension. learraySize doit être une constante entière supérieure à zéro et typepeut être n'importe quel type de données Solidity valide. Par exemple, pour déclarer un tableau de 10 éléments appelé balance de type uint, utilisez cette instruction -

uint balance[10];

Pour déclarer un tableau de taille dynamique dans Solidity, le programmeur spécifie le type des éléments comme suit -

type[] arrayName;

Initialisation des tableaux

Vous pouvez initialiser les éléments du tableau Solidity un par un ou en utilisant une seule instruction comme suit -

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

Le nombre de valeurs entre accolades [] ne peut pas être supérieur au nombre d'éléments que nous déclarons pour le tableau entre crochets []. Voici un exemple pour affecter un seul élément du tableau -

Si vous omettez la taille du tableau, un tableau juste assez grand pour contenir l'initialisation est créé. Par conséquent, si vous écrivez -

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

Vous allez créer exactement le même tableau que vous l'avez fait dans l'exemple précédent.

balance[2] = 5;

L'instruction ci-dessus attribue au numéro d'élément 3 rd dans le tableau la valeur 5.

Création de tableaux de mémoire dynamiques

Les tableaux de mémoire dynamiques sont créés à l'aide d'un nouveau mot-clé.

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

Accès aux éléments de la baie

Un élément est accessible en indexant le nom du tableau. Cela se fait en plaçant l'index de l'élément entre crochets après le nom du tableau. Par exemple -

uint salary = balance[2];

La déclaration ci - dessus prendra 3 ème élément du tableau et affecter la valeur à la variable salaire. Voici un exemple, qui utilisera tous les trois concepts mentionnés ci-dessus à savoir. déclaration, affectation et accès aux tableaux -

Membres

  • length- length renvoie la taille du tableau. length peut être utilisé pour changer la taille du tableau dynamique en le définissant.

  • push- push permet d'ajouter un élément à un tableau de stockage dynamique à la fin. Il renvoie la nouvelle longueur du tableau.

Exemple

Essayez le code suivant pour comprendre le fonctionnement des tableaux dans 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);
   }
}