Добавлять, удалять, изменять элементы

Массивы в языке программирования Solidity могут содержать примитивные типы данных, такие как целые числа, логические значения и строки. Массив может быть инициализирован с фиксированным или динамическим размером. Если мы сравним их с другими более продвинутыми языками программирования, для работы с массивами доступно довольно ограниченное количество функций. Несмотря на это, мы можем добавлять, удалять, получать размер массива и многое другое.

Инициализировать массив

Мы можем создать массив в Solidity с динамическим или фиксированным размером элементов, которые он может содержать.

Использование массива фиксированного размера может снизить затраты на газ, но не всегда мы можем предсказать размер элементов.

Динамический размер

При создании динамического массива в Solidity нам необходимо указать тип данных, который он может содержать. К сожалению, массивы не могут содержать несколько типов данных в одном массиве.

uint256[] array;

Исправленный размер

Другой вариант — указать размер элементов, которые может содержать массив. Это может сэкономить затраты на газ, особенно при создании смарт-контрактов на блокчейне Ethereum.

uint256[10] array;

За кулисами Solidity заполняет массив значениями по умолчанию, которые для uint256 равны 0 (ноль).

Мы также можем предоставить значения при инициализации массива.

uint256[] array = [1,2,3];

Добавить элемент

Мы можем добавить новый элемент для динамического типа массивов. Для этого нам нужно использовать метод push. Он добавляет элемент в конец массива.

Вот пример добавления 100 к массиву, который содержит uint256 значений.

array.push(100);

Изменить элемент

При изменении элемента нам нужно указать индекс и новое значение.

Допустим, мы хотим изменить значение первого элемента в массиве.

array[0] = 101;

Получить размер массива

Чтобы получить размер массива, мы должны использовать функцию length.

uint256 size = array.length;

Удалять

Мы можем удалить элемент из массива с помощью функции delete. Подвох здесь в том, что он не меняет размер массива. Он сбрасывается до значения по умолчанию, которое, например, в случае uint256 равно 0 (ноль).

В этом примере первый элемент массива сбрасывается до 0 (ноль).

delete array[0];

Если мы хотим удалить элемент и изменить длину массива, мы можем переместить все элементы вверх от элемента, который мы хотим удалить. Затем извлеките последний элемент, потому что он больше не нужен.

for (uint256 i = _index; i < _array.length - 1; i++) {
    _array[i] = _array[i + 1];
}
_array.pop();

TL;DR

Массивы в языке программирования Solidity могут содержать примитивные типы данных, такие как uint, boolean, address или string. Мы можем создать массив фиксированного или динамического размера. Массив фиксированного размера меньше влияет на затраты на газ. Мы можем менять элементы, удалять, получать размер массива.

Ссылки