ethereum - 如何将多维数组中的元素推入固定坐标的某个坐标?
问题描述
我有一个这样的数组:
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;
来自https://solidity.readthedocs.io/en/v0.4.24/types.html#arrays(我的重点):
固定大小
k
和元素类型的数组T
写为T[k]
,动态大小的数组写为T[]
。例如,一个由 5 个动态数组组成的数组uint
isuint[][5]
(请注意,与其他一些语言相比,符号是相反的)。要访问第三个动态数组中的第二个 uint,您可以使用x[2][1]
(索引从零开始,访问以与声明相反的方式工作,即x[2]
从右侧减少类型的一层)。
推荐阅读
- reactjs - 组件渲染后如何开始测试?
- javascript - 使用可选令牌时防止正则表达式变得贪婪?
- httpclient - 如何修复 WebAssembly 应用程序中的 HTTP PUT & DELET 错误
- node.js - 如何在快速路由中设置 nextjs 渲染?
- excel - 循环遍历单元格以查找管道 (|),其中一些已找到,但未找到其他
- django - 如何在 Django 视图中显示本地时区的 UTC 时间?
- tcl - 运行仿真时更改内部信号的值
- c - 如何在 Raspberry Pi/Linux 上从控制台“控制”和分离正在运行的程序?
- arduino - 另一个宏arduino中的PSTR宏扩展
- salesforce - 公式字段实现:检查“字段 A”或“字段 B”是否在第一个单词中包含文本“Spring”