// SPDX-License-Identifier: GPL-3.0
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] -->[]
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];//数组元素向左移1
}
arr.pop();//让最后一个值弹出
}
function test() external {
arr = [1,2,3,4,5];
remove(2);
//[1,2,4,5]
assert(arr[0] == 1);
assert(arr[1] == 2);
assert(arr[2] == 4);
assert(arr[3] == 5);
assert(arr.length == 4);
arr = [1];
remove(0);
// []
assert(arr.length == 0);
}
}