Удалить элемент в массиве, но структура все еще внутри - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть этот массив struct

struct Prodotto {
    string titolo;
    address owner_address;
}

Prodotto[] public prodotti;

И я создаю два таких продукта:

titolo: titolo stravolto
owner: 0x144c9617C69B52547f7c2c526352E137488FAF0c

titolo: titolo secondo prodotto
owner: 0xa53709839ab6Da3ad9c1518Ed39a4a0fFCbA3684

Я хочу удалить элемент с индексом 0

в моем контракте у меня есть эта функция

function deleteProdotto(uint _id_prodotto) external payable onlyOwnerOf(_id_prodotto) {
  delete prodotti[0];    
}

Если я получу элемент с индексом 0, у меня будет такой продукт

titolo:
owner: 0x0000000000000000000000000000000000000000

Как я могу удалить этот индекс? Я знаю, что после этого я должен сделать

prodotti.length--

Но прежде чем я должен решить эту проблему

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Попробуйте этот код

contract test {
    struct Prodotto {
        string titolo;
        address owner_address;
    }
    Prodotto[] public prodotti;

    constructor() public {
        for (uint i = 0; i < 5; i++) {
            prodotti.push(Prodotto({
                titolo: 'one more',
                owner_address: address(i)
            }));
        }
    }

    function remove(uint index) public {
        for (uint i = index; i < prodotti.length-1; i++) {
            prodotti[i] = prodotti[i+1];
        }
        delete prodotti[prodotti.length-1];
        prodotti.length--;
    }

    function check() public view returns(uint256) { return prodotti.length; }
}
0 голосов
/ 08 ноября 2018

После этого вам придется перемещать каждый элемент, чтобы не оставить «пробел». Нет способа удалить и переставить элементы, если вы не сделаете это сами.

...