У меня возник вопрос. У меня есть сопоставление, которое сопоставляется со структурой.
contract A{
struct struct1{
//...members...
}
struct struct2{
struct1 input1;
}
mapping (uint => struct1) mapToStruct;
struct2[] allEntries;
//...rest of the code for populating mapToStruct
}
contract B is A{
function addToStruct2(uint _mappingNumber) returns(bool status){
struct2 memory newMember;
struct1 memory newEntry;
newEntry = mapToStruct[_mappingNumber];
newMember.input1 = newEntry;
allEntries.push(newMember);
return true;
}
}
Но этот код не работает, я не могу добавить детали в allEntries
. В массиве есть новая запись, но все его элементы равны 0
, даже после addToStruct2
возврата true. заранее спасибо
Я довольно запутался, когда впервые начал отлаживать это. Вложенные структуры кажутся излишне занятыми. Я бы склонялся к хорошо решенной схеме. Взгляните на некоторые основные шаблоны здесь: Существуют ли хорошо решенные и простые шаблоны хранения для Solidity?
Я думаю, вы можете использовать «сопоставление со структурами», «массив структур с уникальным идентификатором» или даже «сопоставление со структурами и удалением» - своего рода шаблон швейцарского армейского ножа для многих случаев.
Надеюсь, поможет.
Обновлять
Это позволит вам отправить ключ и два входа и сохранить данные. Вы можете получить количество ключей и получить ключи по номеру. Вы можете получить сохраненные входные данные, используя действительный ключ. Когда вы получите неизвестный ключ, isSet
будет false.
contract Simple {
struct MyStruct {
uint input1;
uint input2;
bool isSet;
}
mapping(bytes32 => MyStruct) public myStructs;
bytes32[] public keys;
function addToData(bytes32 key, uint input1, uint input2)
public
returns(bool success)
{
myStructs[key].input1 = input1;
myStructs[key].input2 = input2;
myStructs[key].isSet = true;
keys.push(key);
return true;
}
function getKeyCount()
public
constant
returns(uint keyCount)
{
return keys.length;
}
}
11т
struct2 tempStruct = struct2(x,y,z,...);
, а затемallEntries.push(tempStruct);
, но до сих пор нет прогресса. Я понимаю, что это становится очень сложным, но должно быть что-то, чего мне не хватает. кстати еще раз спасибо :)Роб Хитченс
11т