在映射中保留记录(无覆盖)

Keep record in mapping (no over-writing)

提问人:Asad Arslan 提问时间:10/31/2023 最后编辑:YannickAsad Arslan 更新时间:11/9/2023 访问量:13

问:


contract YourContract {
    struct student_marks
    {
        uint maths ;
        uint science ;
    }

    mapping (address => student_marks) public record ;

    function add_marks(uint _maths, uint _science) public
    {
        record[msg.sender] = student_marks(_maths , _science) ;
    }
}

如果 msg.sender 更新他的标记,则之前的标记将被覆盖。请帮助我如何记录每个msg.sender的标记。没有覆盖。 如果您认为有解决方案,请发表评论。希望我能以正确的方式阐述我的问题。 谢谢!

保存映射的键值数据而不覆盖前面的条目

数组映射 Solidity 覆盖

评论


答:

0赞 Rafael Zerbini 11/9/2023 #1

好吧,你需要一个记录数组,而不是一个单一的记录。

mapping(address => StudentMarks[]) public records;

然后为您的功能addMarks

StudentMarks memory newMarks = StudentMarks(_maths, _science);

records[msg.sender].push(newMarks);

然后你只需要建立你的getMarks策略,你可以通过索引来做。