Mapeo con matriz como tipo de datos clave o valor

¿Es posible hacer un mapeo con un Array como clave/valor? ¿Dónde existiría una matriz para cada valor?

De hecho, estoy buscando almacenar estructuras en un mapeo, pero parece que no puedo hacerlo funcionar.

Struct Foo{
uint x
}

mapping(uint => Foo[])foo;e incluso simplemente mapping([] => uint)foo/ (uint => [])foo;no parece funcionar.

algo para que pueda hacer:

foo.1.push(FooInstance)

foo.1[0] = FooInstance

Solidity Doc lee

Los tipos de asignación se declaran como asignación _KeyType => _ValueType, donde _KeyType puede ser casi cualquier tipo excepto una asignación y _ValueType puede ser cualquier tipo, incluidas las asignaciones.

Entonces, ¿la matriz no se considera un tipo de datos en solidez?

Respuestas (1)

Las asignaciones solo pueden usar elementarytipos ( address, uint, bytes, string) como claves, y más específicamente cualquier tipo para el que sha3()esté definido. Esto significa que las estructuras y matrices actualmente no se pueden usar como claves.

mapping(uint => Foo[]) foo;debería funcionar, y lo hace para mí. Su código tiene algunos errores de sintaxis, que podrían ser el problema ( structno debe escribirse en mayúsculas, uint xnecesita un punto y coma)

[]no es un tipo, necesita algún tipo elemental delante de él, como uint[].

A los elementos de las matrices se accede con notación de corchetes, no de puntos.

Este contrato debería funcionar:

contract Bar{

    struct Foo{
        uint x;
    }
    mapping(uint => Foo[]) foo;

    function add(uint id, uint _x) public {
        foo[id].push(Foo(_x));
    }

    function get(uint id, uint index) public returns(uint){
        return foo[id][index].x;
    }
}
Sí, de hecho, me acabo de dar cuenta de que venía aquí para responder a mi propia pregunta. ¡Gracias por la ayuda!
¿Hay alguna manera de devolver toda la matriz?