Solidez: matrices

Array es una estructura de datos que almacena una colección secuencial de tamaño fijo de elementos del mismo tipo. Una matriz se usa para almacenar una colección de datos, pero a menudo es más útil pensar en una matriz como una colección de variables del mismo tipo.

En lugar de declarar variables individuales, como número0, número1, ... y número99, declaras una variable de matriz como números y usas números [0], números [1] y ..., números [99] para representar variables individuales. Se accede a un elemento específico de una matriz mediante un índice.

En Solidity, una matriz puede tener un tamaño fijo en tiempo de compilación o un tamaño dinámico. Para la matriz de almacenamiento, también puede tener diferentes tipos de elementos. En el caso de una matriz de memoria, el tipo de elemento no se puede mapear y en caso de que se use como parámetro de función, el tipo de elemento debe ser un tipo ABI.

Todas las matrices constan de ubicaciones de memoria contiguas. La dirección más baja corresponde al primer elemento y la dirección más alta al último elemento.

Declaración de matrices

Para declarar una matriz de tamaño fijo en Solidity, el programador especifica el tipo de elementos y el número de elementos requeridos por una matriz de la siguiente manera:

type arrayName [ arraySize ];

Esto se llama matriz unidimensional. losarraySize debe ser una constante entera mayor que cero y typepuede ser cualquier tipo de datos de solidez válido. Por ejemplo, para declarar una matriz de 10 elementos llamada balance de tipo uint, use esta declaración:

uint balance[10];

Para declarar una matriz de tamaño dinámico en Solidity, el programador especifica el tipo de los elementos de la siguiente manera:

type[] arrayName;

Inicialización de matrices

Puede inicializar los elementos de la matriz Solidity uno por uno o usando una sola declaración de la siguiente manera:

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

El número de valores entre corchetes [] no puede ser mayor que el número de elementos que declaramos para el arreglo entre corchetes []. A continuación se muestra un ejemplo para asignar un solo elemento de la matriz:

Si omite el tamaño de la matriz, se crea una matriz lo suficientemente grande como para contener la inicialización. Por lo tanto, si escribe -

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

Creará exactamente la misma matriz que hizo en el ejemplo anterior.

balance[2] = 5;

Lo anterior cesionarios declaración elemento número 3 rd en la matriz de un valor de 5.

Crear matrices de memoria dinámica

Las matrices de memoria dinámica se crean utilizando una nueva palabra clave.

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

Acceso a elementos de matriz

Se accede a un elemento indexando el nombre de la matriz. Esto se hace colocando el índice del elemento entre corchetes después del nombre de la matriz. Por ejemplo

uint salary = balance[2];

La declaración anterior se llevará a 3 rd elemento de la matriz y asignar el valor a la variable salario. A continuación se muestra un ejemplo, que utilizará los tres conceptos mencionados anteriormente, a saber. declaración, asignación y acceso a matrices -

Miembros

  • length- length devuelve el tamaño de la matriz. length se puede usar para cambiar el tamaño de la matriz dinámica al configurarlo.

  • push- push permite agregar un elemento a una matriz de almacenamiento dinámica al final. Devuelve la nueva longitud de la matriz.

Ejemplo

Pruebe el siguiente código para comprender cómo funcionan las matrices en 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);
   }
}