首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Todo清单。列出所有问题

Todo清单。列出所有问题
EN

Ethereum用户
提问于 2022-10-25 11:36:07
回答 1查看 95关注 0票数 0

我制定了简单的待办事项清单合同。我想要实现的是在function showTodo()中列出所有增加的待办事项,我知道我不能直接返回映射,但我坚持住了。

因此,基本上每个msg.sender都可以添加/删除待办事项,但是每个人都可以列出所有的待办事项,而不仅仅是像现在这样的msg.sender

有什么想法吗?所有的帮助都很感激。谢谢。

代码语言:javascript
复制
contract Todo {

 mapping(address => string[]) todos;


function addTodo(string memory _todo) public{
    todos[msg.sender].push(_todo);
}

function delTodo(uint idx) public{
    require(idx < todos[msg.sender].length);
    delete todos[msg.sender][idx];
    todos[msg.sender][idx] = todos[msg.sender][todos[msg.sender].length - 1];
    todos[msg.sender].pop();

}

function showTodo() public view returns(string[] memory){
    return(todos[msg.sender]);
}
EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-10-25 19:36:42

嗯,你能不能改一下你的问题,这样我才能帮你。我不明白你的问题是什么。

编辑:

我明白你的意思了。最简单的解决方案是添加一个字符串数组来存储每个任务。下面是:

代码语言:javascript
复制
pragma solidity ^0.8.5;

contract Todo {

 mapping(address => string[]) todos;
 string[]  public allTodos;


function addTodo(string memory _todo) public{
    todos[msg.sender].push(_todo);
    allTodos.push(_todo);
}

function delTodo(uint idx) public{
    require(idx < todos[msg.sender].length);
    string memory _todo = todos[msg.sender][idx];
    delete todos[msg.sender][idx];
    todos[msg.sender][idx] = todos[msg.sender].[todos[msg.sender].length - 1];
    todos[msg.sender].pop();
    for (uint i; i<allTodos.length; i++) {
        if (keccak256(abi.encodePacked(_todo))==keccak256(abi.encodePacked(allTodos[i]))) {
         delete allTodos[i];
    }
  }
}





function showTodo() public view returns(string[] memory){
    return(todos[msg.sender]);
}

}

您可以尝试这样做,现在delTodo()函数也将从allTodos数组中删除字符串。

请注意:我对解决问题的建议不是生产水平。人们普遍认为,对于智能契约编程,应该避免遍历数组,因为它们是最昂贵的操作之一。

delete方法也应该谨慎使用,因为它的名称具有欺骗性。它不会删除数组中指定的元素,而只是将其还原为默认值(对于uint/int它的0,对于string其')。它不会改变(即缩短)数组的长度。

我希望我已经帮了你。继续黑客攻击!)

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/138128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档