我有这个结构数组
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--
但是在我必须解决此问题之前
答案 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; }
}