📜  Solidity-映射(1)

📅  最后修改于: 2023-12-03 14:47:30.920000             🧑  作者: Mango

Solidity映射

Solidity映射是一种用于在以太坊智能合约中存储和检索数据的数据结构。它类似于键值对,其中每个键对应一个值。映射可以是地址映射到整数,字符串映射到布尔值或其他任何类型的映射。

创建映射

要创建一个映射,我们需要指定键和值的类型,然后使用关键字“mapping”。以下是一个示例:

// 创建一个映射,将地址映射到uint类型
mapping(address => uint) public balances;

在上面的示例中,我们创建了一个名为“balances”的映射,它将地址映射到一个无符号整数。

存储和检索值

要向映射中存储值,我们只需使用方括号将键包装在内,并将值赋给它。以下是一个示例:

balances[msg.sender] = 100;

在上面的示例中,我们将发送交易的地址的余额设置为100。

要检索值,我们只需使用方括号将键包装在内,并将其用于表达式。以下是一个示例:

uint myBalance = balances[msg.sender];

在上面的示例中,我们检索发送交易地址的余额,并将其赋给变量“myBalance”。

映射的迭代

从Solidity 0.6.0开始,可迭代映射。以下是一个示例:

mapping(uint => bool) public myMap;

function setMyMap() public {
   for (uint i = 0; i < 10; i++) {
       myMap[i] = true;
   }
}

function getMyMap() public view returns (bool[] memory) {
   bool[] memory values = new bool[](10);
   for (uint i = 0; i < 10; i++) {
       values[i] = myMap[i];
   }
   return values;
}

在上面的示例中,我们创建了一个名为“myMap”的映射,它将一个无符号整数映射到布尔值。我们使用“setMyMap”函数来设置映射的前10个值为“真”。在“getMyMap”函数中,我们迭代整个映射,并将所有值存储在一个名为“values”的新布尔数组中,然后将其作为返回值。

映射的删除

要从映射中删除项,我们只需将其设置为默认值。以下是一个示例:

delete balances[msg.sender];

在上面的示例中,我们从“balances”映射中删除了发送交易地址的余额。

总结

Solidity映射是一种强大的数据结构,可用于存储和检索在以太坊智能合约中操作所需的任何数据。通过使用映射,开发人员可以很容易地创建高效和可维护的智能合约。