Ethereum 如何将多维数组中的元素按一定的坐标进行实体推送?

Ethereum 如何将多维数组中的元素按一定的坐标进行实体推送?,ethereum,solidity,smartcontracts,Ethereum,Solidity,Smartcontracts,我有这样一个数组: Animal[3][2][] animalArray. 当我有了“狗”这样的新元素后,如何将它推到某个地方 Animal[2][1][]? 我试过了 animalArray[2][1].push(dog); 它总是给我错误 下面是出现问题的代码: pragma solidity ^0.4.0; contract Zootest { struct Zoo { uint state; Animal[][2][3] animalarr

我有这样一个数组:

    Animal[3][2][] animalArray.
当我有了“狗”这样的新元素后,如何将它推到某个地方

    Animal[2][1][]?
我试过了

    animalArray[2][1].push(dog);
它总是给我错误

下面是出现问题的代码:

pragma solidity ^0.4.0;
contract Zootest {

struct Zoo {
    uint state;
    Animal[][2][3] animalarray;
    uint price;
}

 struct Animal {
    uint quantity;
    address Address;
}

mapping (uint => Zoo) zoo;

function openZoo (uint index) {
    Zoo memory newZoo = Zoo({
        state: 1,
        price: 0,
        animalarray: new Animal[][2][3](0)
    });
    zoo[index] = newZoo;
}

function enterZoo (uint index, uint x, uint y, uint quantity) public {
    Animal memory newAnimal = Animal({
        Address:msg.sender,
        quantity:quantity
    }); 
    zoo[index].price = zoo[index].price+msg.value;
    zoo[index].animalarray[x][y].push(newAnimal);
}

}

也许您的意思是这样声明数组:

Animal[][2][3] animalArray;
来自(我的重点):

固定大小
k
和元素类型
T
的数组写为
T[k]
,动态大小的数组写为
T[]
例如,一个由5个动态数组组成的
uint
数组是
uint[][5]
(注意,与其他一些语言相比,符号是相反的)。
要访问第三个动态数组中的第二个uint,可以使用
x[2][1]
(索引是从零开始的,访问工作与声明相反,即
x[2]
从右侧删除类型中的一个级别)


animalArray
是一个2D数组的动态列表(大小为3x2),数组中的每个元素都是
Animal
类型,这真的是你想要的结构吗?非常感谢!!!但是如果我按此顺序排列,我应该如何初始化它?
新动物[][2][3](0)
已经不起作用了。你能解释一下你的意思吗?有了我给出的声明,你应该可以只做
animalArray[2][1]。按(狗)
就像你原来的问题一样。不需要任何形式的“初始化”除非我误解了你想做什么?因为这个数组在一个类结构中,所以据我所知,每次我新建一个实例时,我都需要给结构中的每个变量赋予一些默认值。我不知道你所说的“类结构”是什么意思如果您只是按照我的建议声明变量(并且不做任何形式的“初始化”),也许您可以分享您的最新代码,并描述您遇到的问题。感谢您的友好回复。它是这样的:
struct Zoo{animalArray[][2][3]animalArray;}
所以每当我这样做时:
Zoo memory newAnimal=Zoo({animalArray:new Animal[][2][3](0)};
我必须初始化所有内容,否则会收到错误消息。。