19-Solidity8.0-删除数组元素通过替换

457 阅读1分钟

同上一篇一样的是都是删除数组的某一项,但下面的方法会改变数组元素的顺序,币上一种方法节省gas;

image.png 源码:

pragma solidity ^0.8.7;


//[1,2,3, 4, 5, 6] -- remove (2) --> [1, 2, 4, 5, 6, 6] -->[1, 2, 4, 5, 6]
contract ArrayShift{
    uint [] public arr;

    // [1, 2, 3, 4] -- remove(1) -->[1, 4, 3]
    // [1, 4, 3]    --remove(2) -->[1, 4]
    function remove(uint _index) public {
        arr[_index] = arr[arr.length - 1 ];
        arr.pop();
    }

    function test() external {
        arr =[1, 2, 3, 4];
        remove(1);
        //[1, 4, 3]
        assert(arr.length == 3);
        assert(arr[0] == 1);
        assert(arr[1] == 4);
        assert(arr[2] == 3);

        remove(2);

        //[1, 4]
        assert(arr.length == 2);
        assert(arr[0] == 1);
        assert(arr[1] == 4);

    }
}