Solidity中如何更新与mapping关联的结构体成员变量amount的值
Solidity 结构体与mapping关联后更新字段的实现方案
问题说明
你当前的代码逻辑存在值拷贝问题:data1 mapping中存储的是p1结构体的值副本,不是引用关系。你后续直接修改p1的amount字段不会自动同步到data1中已经存储的对应条目。
修正后完整代码
pragma solidity ^0.8.0; contract acc_data{ struct person{ string name; uint age; address add; uint amount; } person public p1; mapping(address=>person) public data1; // 将p1结构体映射存入data1 function map()public{ data1[p1.add] = p1; } // 初始化p1结构体的基础属性 function structsetter()public { p1.name = "rohit"; p1.age = 22; p1.add = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4; p1.amount = 0; } // 同步更新p1和关联mapping条目的amount字段 function setter() public { p1.amount = 7; // 确认已完成映射关联后同步更新mapping中的值 if(data1[p1.add].add == p1.add) { data1[p1.add].amount = 7; } } // 可选方法:直接更新指定地址对应mapping条目的amount字段 function updateMappingAmount(address targetAddr, uint newAmount) public { data1[targetAddr].amount = newAmount; } }
正确调用流程
- 调用
structsetter()完成p1结构体的基础属性初始化 - 调用
map()将p1存入data1完成映射关联 - 调用
setter()即可同时更新p1和data1对应条目的amount取值
内容的提问来源于stack exchange,提问作者Tipu Singh
相关产品推荐
相关产品推荐

