首页 > 解决方案 > 如何将多维数组中的元素推入固定坐标的某个坐标?

问题描述

我有一个这样的数组:

    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);
}

}

标签: ethereumsoliditysmartcontracts

解决方案


也许您打算以这种方式声明数组:

Animal[][2][3] animalArray;

来自https://solidity.readthedocs.io/en/v0.4.24/types.html#arrays(我的重点):

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


推荐阅读