20数组移动删除元素

缺点:浪费gas

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

contract ArrayShift{
    uint[] public arr =[1,2,3];
    // 把index后面的元素全部左移,然后把最后一个元素移除
    // [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, 2, 3, 4, 5, 6] -- remove(0) --> [2, 3, 4, 5, 6, 6] --> [2, 3, 4, 5, 6]
    // [1] -- remove(0) --> [1] --> []
    function remove(uint _index)public {
        require(_index<arr.length,"index should less than the length of the array.");
        for (uint i=_index;i<arr.length-1;i++){
            arr[i]=arr[i+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);
    }

}