You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:07