如何访问分配给映射的结构的变量



我想更改已创建的结构实例的变量。我将一个Candidate结构分配给映射中的address变量,并将投票者的地址分配给他们投票支持的候选人的地址。

struct Candidate {
address candidateAddress;
string candidateName;
int numVotes;
}
mapping(address => address) votes;
mapping(address => Candidate) candidates;

我试过以下

function castVote(address _address) public {
votes[msg.sender] = _address;
candidates[_address].numVotes += 1;
}

这不会引发错误,但当我测试两个候选测试的numVotes时,我会像这样硬编码

Candidate public candidateOne = Candidate(0x5B38Da6a701c568545dCfcB03FcB875f56beddC4, "Adam Apple", 0);
Candidate public candidateTwo = Candidate(0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2, "John Doe", 0);


function assignCand() public {
candidates[0x5B38Da6a701c568545dCfcB03FcB875f56beddC4] = candidateOne;
candidates[0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2] = candidateTwo;
}

我仍然是Solidity的初学者,所以任何帮助都将不胜感激:(谢谢!

一种方法:

function castVote(address _address) public {
votes[msg.sender] = _address;
Candidate storage candi = candidates[_address];
candi.numVotes = candi.numVotes + 1; // think about using SafeMath here unless it doesn't seem to ever overflow
}

另一种方式:

function castVote(address _address) public {
votes[msg.sender] = _address;
Candidate memory candi = candidates[_address];
candi.numVotes = candi.numVotes + 1;
candidates[_address] = candi;
}

尝试两者并比较用气量。我记不清了,但一个会更便宜。

最新更新