tenía una pregunta Tengo un mapeo que mapea a struct.
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;
}
}
Pero este código no funciona, no puedo agregar los detalles a allEntries
. La matriz tiene una nueva entrada pero todos sus miembros son 0
, incluso después de que addToStruct2
devuelve verdadero. gracias de antemano
Me enredé bastante cuando comencé a depurar esto. Las estructuras anidadas parecen innecesariamente ocupadas. Me inclinaría por un patrón bien resuelto. Eche un vistazo a algunos patrones básicos aquí: ¿ Existen patrones de almacenamiento sencillos y bien resueltos para Solidity?
Creo que puede usar "mapeo con estructuras", "matriz de estructuras con ID único" o incluso "mapeo con estructuras y eliminar", una especie de patrón de navaja suiza para muchos casos.
Espero eso ayude.
Actualizar
Esto le permitirá enviar una clave y dos entradas y almacenar los datos. Puede obtener un recuento de claves y obtener las claves por número. Puede recuperar las entradas guardadas con una clave válida. Cuando obtenga una clave desconocida, isSet
será falsa.
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;
}
}
11t
struct2 tempStruct = struct2(x,y,z,...);
y luegoallEntries.push(tempStruct);
, pero aún no hubo progreso. Entiendo que se está poniendo muy complejo, pero debe haber algo que me falta. por cierto gracias de nuevo :)Rob Hitchens
11t