删除数组中的元素,但结构仍在内部

时间:2018-11-08 18:46:56

标签: ethereum solidity smartcontracts

我有这个结构数组

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 :(得分:0)

此后,您将不得不移动每个元素,以免留下“空白”。除非您自己进行操作,否则无法删除和重新排列元素。

答案 1 :(得分:0)

尝试此代码

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