📜  Solidity – 数组(1)

📅  最后修改于: 2023-12-03 15:05:14.469000             🧑  作者: Mango

Solidity – 数组

数组是Solidity中常用的数据结构之一。它允许程序员在一个变量中存储多个相同类型的元素。Solidity中的数组有以下几种类型:

  1. 固定大小的数组(Fixed-Size Arrays):数组的大小在声明时已确定,无法修改大小。
  2. 动态大小的数组(Dynamic Arrays):数组的大小可以在声明后进行修改。
固定大小的数组

固定大小的数组在声明时指定了数组的大小,例如:

uint[5] public numbers;

在上面的示例中,我们声明了一个长度为5的无符号整数数组numbers。这意味着numbers可以存储5个无符号整数。数组的大小无法修改,因此我们无法将更多或更少的元素添加到数组中。

固定大小的数组的元素可以通过索引进行访问和修改。数组的索引从0开始,因此第一个元素的索引为0,第二个元素的索引为1,依此类推。例如,我们可以通过以下方式访问和修改第一个元素:

numbers[0] = 10;
uint firstNumber = numbers[0];
动态大小的数组

动态大小的数组允许在声明后根据需要修改数组的大小。声明动态大小的数组时,不需要指定数组的大小。例如:

uint[] public numbers;

在上面的示例中,我们声明了一个无符号整数的动态大小数组numbers。该数组的大小可以根据需要进行修改。我们可以使用push函数添加新的元素到数组中,使用length属性可以获取数组的当前大小。

numbers.push(10);
uint arrayLength = numbers.length;

我们还可以使用索引访问和修改动态大小的数组的元素,方法与固定大小数组相同。

数组遍历

Solidity提供了几种遍历数组的方式,包括使用for循环和foreach语法。以下是使用for循环遍历固定大小和动态大小数组的示例:

// 遍历固定大小数组
for (uint i = 0; i < numbers.length; i++) {
    // 访问数组元素
    uint number = numbers[i];
    // 执行相关操作
}

// 遍历动态大小数组
for (uint i = 0; i < dynamicArray.length; i++) {
    // 访问数组元素
    uint element = dynamicArray[i];
    // 执行相关操作
}

Solidity 0.8.0版本及以上还支持使用foreach语法遍历数组:

// 遍历固定大小或动态大小数组
for (uint i; i < numbers.length; i++) {
    // 访问数组元素
    uint number = numbers[i];
    // 执行相关操作
}
多维数组

Solidity还支持多维数组,即数组的元素也是数组。例如,我们可以声明一个二维动态大小的整数数组如下:

uint[][] public matrix;

在上面的示例中,matrix是一个二维动态大小数组。我们可以通过类似的语法访问和修改多维数组的元素,例如matrix[0][1]表示二维数组的第一行第二列的元素。

以上是Solidity中数组的基本介绍。数组是在合约中处理数据时非常有用的工具,可以帮助程序员更高效地管理和操作多个元素。通过灵活使用数组,您可以构建出更加复杂和有用的智能合约。