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)};
我必须初始化所有内容,否则会收到错误消息。。