7.1 Arrays unidimensionales y multidimensionales





Arrays en Solidity

7.1 Arrays unidimensionales y multidimensionales en Solidity

En Solidity, los arrays son una estructura de datos que permite almacenar múltiples valores del mismo tipo. Pueden ser unidimensionales o multidimensionales. En esta sección, se explorarán estos dos tipos de arrays en detalle, incluyendo su sintaxis y ejemplos de uso.

Arrays Unidimensionales

Un array unidimensional es una estructura lineal de datos que puede contener varios elementos de un mismo tipo. En Solidity, los arrays pueden ser de tamaño fijo o dinámico.

Arrays de Tamaño Fijo

Un array de tamaño fijo tiene un tamaño determinado en el momento de su declaración. Este tamaño no puede cambiar durante la ejecución del contrato.

// Declaración de un array de tamaño fijo de enteros con 5 elementos
uint[5] fixedArray 

// Inicialización de los elementos del array
fixedArray[0] = 1
fixedArray[1] = 2
fixedArray[2] = 3
fixedArray[3] = 4
fixedArray[4] = 5

// Intentar cambiar el tamaño del array resultará en un error
// fixedArray.push(6) -> Error: This function does not exist

En este ejemplo, fixedArray se declara como un array de 5 elementos de tipo uint. Los elementos individuales se pueden acceder a través de sus índices (comenzando en 0).

Arrays Dinámicos

Un array dinámico no tiene un tamaño fijo en el momento de su declaración, lo que permite que su tamaño cambie durante la ejecución del contrato.

// Declaración de un array dinámico de enteros
uint[] dynamicArray 

// Añadir elementos al array
dynamicArray.push(1)
dynamicArray.push(2)
dynamicArray.push(3)

// Obtener el tamaño del array
uint length = dynamicArray.length  // length = 3

// Acceder a un elemento del array
uint firstElement = dynamicArray[0]  // firstElement = 1

En este ejemplo, dynamicArray comienza vacío, y se agregan elementos mediante la función push. La propiedad length se utiliza para obtener el número de elementos en el array.

Arrays Multidimensionales

Un array multidimensional es un array de arrays. En Solidity, se pueden crear arrays bidimensionales, tridi-mensionales y de dimensiones superiores, aunque es menos común ver más de dos dimensiones.

Arrays Bidimensionales

Un array bidimensional puede ser visto como una tabla con filas y columnas. A continuación se presenta la declaración e inicialización de un array bidimensional.

// Declaración de un array bidimensional de tamaño fijo
uint[2][3] fixed2DArray 

// Inicialización del array bidimensional
fixed2DArray[0][0] = 1
fixed2DArray[0][1] = 2
fixed2DArray[1][0] = 3
fixed2DArray[1][1] = 4
fixed2DArray[2][0] = 5
fixed2DArray[2][1] = 6

En este ejemplo, fixed2DArray es un array bidimensional con 3 filas y 2 columnas. Cada celda puede ser accedida usando dos índices: el primero para la fila y el segundo para la columna.

Arrays Multidimensionales Dinámicos

Los arrays multidimensionales también pueden ser dinámicos. Este tipo de estructura permite que cada dimensión del array pueda crecer a voluntad.

// Declaración de un array bidimensional dinámico
uint[][] dynamic2DArray

// Añadir una nueva fila (array) al array bidimensional
dynamic2DArray.push([1, 2, 3])
dynamic2DArray.push([4, 5, 6])

// Acceder a un elemento del array bidimensional dinámico
uint secondElementInFirstRow = dynamic2DArray[0][1]  // secondElementInFirstRow = 2

En este ejemplo, dynamic2DArray es un array bidimensional dinámico. Cada fila se añade como un array individual utilizando la función push.

Consideraciones Adicionales

  • Los arrays pueden ser públicos o privados. Si son públicos, Solidity genera automáticamente una función de acceso para ellos.
  • El uso de arrays dinámicos puede ser costoso en términos de gas, por lo que se recomienda usarlos con moderación.
  • Los arrays pueden contener tipos de datos complejos como structs y otros arrays (creando así matrices multidimensionales más complejas).

Esta explicación debería proporcionarte una comprensión fundamental y avanzada de los arrays en Solidity, permitiendo su uso efectivo en tus contratos inteligentes.


AnteriorSiguiente

[mwai_chat]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *