📜  Solidity-循环(1)

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

Solidity 循环概述

Solidity 是一种编程语言,旨在代表以太坊区块链上的智能合约。循环语句是基本的编程概念,Solitity 也提供了多重循环结构,以及多重循环嵌套。在本文中,我们将介绍 Solidity 中的循环语句。

for 循环

for 循环允许您将代码块重复执行指定次数。其基本语法如下:

for (initialize; condition; update) {
  // 代码块
}

initialize 部分用于初始化循环的初始状态。condition 部分将在每次循环迭代时进行检查。只要 condition 表达式的值为 true,则代码块将继续执行。update 的部分在每次迭代后执行。

以下示例说明了如何使用 for 循环输出数字 0 到 9:

pragma solidity ^0.8.0;

contract Loop {
  function loop() public pure returns (uint) {
    uint sum = 0;

    for (uint i = 0; i < 10; i++) {
      sum += i;
    }

    return sum; // 输出 45
  }
}

在上面的示例中,我们设置一个名为 i 的变量,其初始值为 0。另一个变量 sum 用于计算循环中的数字和。在每次迭代中,我们将 i 的值增加 1。循环将在 i 的值等于10 时退出。

while 循环

while 循环执行代码块,只要指定条件为 true。以下是其基本语法:

while (condition) {
  // 代码块
}

以下示例说明了如何使用 while 循环输出数字 0 到 4:

pragma solidity ^0.8.0;

contract Loop {
  function loop() public pure returns (uint) {
    uint i = 0;
    uint sum = 0;

    while (i < 5) {
      sum += i;
      i++;
    }

    return sum; // 输出 10
  }
}

在上面的示例中,我们创建了一个名为 i 的变量,其初始值为 0。此外,我们使用另一个变量 sum 来计算循环中数字的总和。在每次迭代中,如果 i < 5,将执行代码块。在每次迭代之后,我们将 i 的值增加 1。循环在 i 等于 5 时退出。

do-while 循环

do-while 循环执行代码块一次,然后检查指定的条件是否为 true。如果条件为 true,则重复执行代码块。其基本语法如下:

do {
  // 代码块
} while (condition);

以下示例说明了如何使用 do-while 循环输出数字 0 到 4:

pragma solidity ^0.8.0;

contract Loop {
  function loop() public pure returns (uint) {
    uint i = 0;
    uint sum = 0;

    do {
      sum += i;
      i++;
    } while (i < 5);

    return sum; // 输出 10
  }
}

在上面的示例中,我们创建了一个名为 i 的变量,其初始值为 0。此外,我们使用另一个变量 sum 来计算循环中数字的总和。在每次迭代中,我们将 i 的值增加 1。循环将在 i 等于 5 时退出。

foreach 循环

foreach 循环允许您遍历数组或映射。以下是其基本语法:

数组
for (uint i = 0; i < 数组名称.length; i++) {
  // 数组代码块
}

以下示例说明了如何使用 foreach 循环输出数组中的每个元素:

pragma solidity ^0.8.0;

contract Loop {
  function loop() public pure returns (uint) {
    uint[5] memory arr = [uint(0), 1, 2, 3, 4];
    uint sum = 0;

    for (uint i = 0; i < arr.length; i++) {
      sum += arr[i];
    }

    return sum; // 输出 10
  }
}

在上面的示例中,我们创建了一个名为 arr 的数组,其为长度为 5 的代币数组。我们使用 arr.length 遍历该数组中的每个元素。在每次迭代中,我们将 arr[i] 的值添加到另一个变量 sum 中。

映射
for (uint keyIndex = 0; keyIndex < 映射名称.keys.length; keyIndex++) {
  // 映射代码块
}

以下示例说明了如何使用 foreach 循环输出映射中的每个元素:

pragma solidity ^0.8.0;

contract Loop {
  function loop() public pure returns (uint) {
    mapping(uint => uint) map;
    map[0] = 0;
    map[1] = 1;
    map[2] = 2;
    uint sum = 0;

    for (uint keyIndex = 0; keyIndex < map.keys.length; keyIndex++) {
      uint key = map.keys[keyIndex];
      uint value = map[key];

      sum += value;
    }

    return sum; // 输出 3
  }
}

在上面的示例中,我们创建了一个名为 map 的映射。我们使用 map.keys.length 遍历该映射中的每个元素。在每次迭代中,我们获取一个 key 和一个 value。然后,我们将 value 添加到另一个变量 sum 中。

多重循环

多重循环是一种嵌套循环。一种常见的用法是使用一个内部循环来遍历数组,而使用外部循环来遍历数组中的每个元素。以下示例说明了如何使用多重循环输出数字 0 到 9:

pragma solidity ^0.8.0;

contract Loop {
  function loop() public pure returns (uint) {
    uint sum = 0;

    for (uint i = 0; i < 3; i++) {
      for (uint j = 0; j < 3; j++) {
        sum += j + i * 3;
      }
    }

    return sum; // 输出 36
  }
}

在上面的示例中,我们使用两个嵌套的 for 循环来输出数字。外部循环负责重复内部循环中的代码块,i * 3 用于计算每个数字所在的行。内部循环负责将每一行中的数字加在一起。

结论

循环是 Solidity 中最基本的编程概念之一。在本文中,我们介绍了 Solidity 中的各种循环语句及其用法。使用这些循环语句,您可以有效地遍历数组和映射,以及重复执行代码块。