如何在Solidity中返回映射列表?(以太坊合约)

6lo*_*nde 16 ethereum solidity

我想制作一个简单的智能合约,它有一个列表,可以设置项目,并可以获取列表.

代码实力:

contract lister {
    mapping(int => string) list;
    int id = 0;

    function getList() returns ( /*HERE*/ ) {
        return list;
    }

    function setItemToList(string str) {
        list[id] = str;
        id++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想让getList()返回列表,但返回类型不兼容.我怎样才能做到这一点?

bor*_*yer 17

批量访问列表/数组/等在Solidity中很痛苦.你很少在合同中看到它.在您的情况下,一种可能的解决方案是提供一个函数来使用其索引访问 一个项目,并让调用者从0循环到id.

  • 我只是熟悉Solidity,但这对我来说是惊人的.如何构建任何有用的应用程序?我们是否应该在其他地方(在非以太网应用程序中)_actually_持久化数据并使用dapps与之交互并验证数据完整性? (3认同)

Ale*_*lex 8

对于映射,不会存储键,也无法迭代值,因此它们实际上只适用于单值查找。在您提供的示例中,使用数组可能是更好的选择。

另一方面,如果您使用数组并需要对其进行搜索(循环遍历所有项目),则需要小心,因为如果数组中的项目太多,最终可能会花费大量的时间调用该函数的气体。