使用delete函数删除内容时,remix可能出现警告:
“browser/new.sol:39:119:Using delete on an array leaves a gap. The length of the array remains the same. If you want to remove the empty position you need to shift items manually and update the length property.”
经查看,delete函数在删除array中的数据时并不会改变array的长度,只会将对应量归零,array的长度需要手动修改。
如:
contract MyContract {
uint[] array = [1,2,3];
function removeAtIndex(uint index) returns (uint[]) {
if (index >= array.length) return;
for (uint i = index; i < array.length-1; i++) {
array[i] = array[i+1];
}
delete array[array.length-1];
array.length--;
return array;
}
}
这段代码中,使用delete删除array中的元素后,对数组长度进行了减一操作。
在Solidity中,使用delete函数删除数组元素不会自动调整数组长度。需手动移动元素并更新长度属性,避免留下空位。本文提供了一个示例代码,展示了如何在删除元素后正确更新数组长度。
2715

被折叠的 条评论
为什么被折叠?



