基本原理:将数组中要删除的元素之后的所有元素向左移动一个位置,然后修改数组大小,使其排除最后一个元素.
示例代码:
pragma solidity ^0.8.7;
//数组删除元素通过移动位置
contract ArrayShift {
uint[] public arr;
function example() public {
arr = [1, 2, 3];
delete arr[1];//[1, 0, 3]
}
// [1, 2, 3] remove(1) --> [1, 3, 3] --> [1, 3]
// [1, 2, 3, 4, 5, 6] remove(2) --> [1, 2, 4, 5, 6, 6]-->[1, 2, 4, 5, 6]
// [1] remove(0) --> [1] --> []
//将数组第i位替换成i+1位,最后用pop弹出数组最后一位,完成删除数组元素
function remove (uint _index) public {
require(_index < arr.length,"index out of bound");
for(uint i = _index; i < arr.length- 1; i++){
arr[i] = arr[i + 1];
}
arr.pop();//pop()方法会弹出数组最后一个元素
}
}
上面示例代码实现数组元素移动位置的方法:将数组第i位替换成i+1位,最后用函数pop()弹出数组最后一位,完成删除数组元素。
优点:不会改变数组元素的顺序
缺点:消耗gas