Как вставить элемент в многомерный массив по определенной координате в твердости? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть такой массив:

    Animal[3][2][] animalArray.

После того, как у меня появился новый элемент, такой как "собака", как поместить его в определенное место как

    Animal[2][1][]?

Iпробовал

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

}

1 Ответ

0 голосов
/ 08 июня 2018

Возможно, вы хотели объявить массив следующим образом:

Animal[][2][3] animalArray;

С https://solidity.readthedocs.io/en/v0.4.24/types.html#arrays (мой акцент):

Массив фиксированного размера k и тип элемента T записывается как T[k], массив динамического размера - как T[]. В качестве примера, массив из 5 динамических массивов uint равен uint[][5] (обратите внимание, что нотация обратная по сравнению с некоторыми другими языками). Чтобы получить доступ ко второму uint в третьем динамическом массиве,вы используете x[2][1] (индексы начинаются с нуля, а доступ работает в противоположном от объявления порядке, т. е. x[2] сбрасывает один уровень в типе справа).

...