Массивы в Solidity содержатся в storage
вместо memory
. Просьба ссылаться на эту статью для лучшего понимания разницы между ними. Поскольку хранилище является динамическим, вы не можете напрямую добавить элемент в индекс, так как этот индекс может не существовать в хранилище. Если вы хотите добавить элемент в динамический массив хранения, вы должны использовать push()
примерно так:
function addCandidate(string memory name) public {
Candidate memory newCandidate = Candidate(candidateCount, name, 0);
candidates.push(newCandidate);
}
Второй вариант - использовать отображение, так как отображения более выгодны, чем массивы в Solidity, из-за меньшей сложности и стоимости. Однако при использовании сопоставления вам, возможно, придется отслеживать длину и индексы в зависимости от ваших конкретных требований к реализации.