4. Solidity:引用类型变量:数组

2023-09-25  本文已影响0人  泡泡龙吐泡泡

4.1 数组分类

    // 动态数组
    uint[] public nums = [1,2,3];
    bytes public bs;
    address[] public addrs;
    // 定长数组
    uint[3] public nums3 = [1,2,3];
    bytes[3] public bs4;
    address[3] public addrs3;

4.2 数组操作

    // 数组操作 
    function arrayOp() external returns (uint,uint,uint[] memory){
        // 获取数组长度
        uint a = nums.length;
        uint b = nums3.length;
 
        // push() & push(x)
        nums.push(); // 数组长度增加1,push元素为uint默认值:[1,2,3] -> [1,2,3,0]
        nums.push(5); // [1,2,3,0,5]

        // delete
        delete nums[1]; // [1,0,3,0,5]

        // pop()
        nums.pop(); // [1,0,3,0]
        return (a,b,nums);
    }

4.3 内存中的数组

    // 内存中的数组
    function arrInMemory() pure external returns (uint, uint[] memory) {
        // 在内存中创建数组,使用new关键字,数组必须指定长度。(内存中的数组必须为定长数组)
        uint[] memory a = new uint[](3);

        // 内存中数组的相关操作
        // 获取数组长度
        uint l = a.length;
        // 赋值
        a[0] = 1;
        a[1] = 2;
        a[2] = 3;
        // "删除元素"
        delete a[1];

        return (l,a);
    }

4.4 数组元素删除

Solidity中delete方法只会将数组中的元素置为默认值,并不会将数组中的元素从数组中移出,即不会改变数组长度。如果想删除数组中的指定元素,根据业务需求不同,可以有移动数组元素和替换数组元素两种方法。

    // 删除数组元素--移动数组元素
    function remove1(uint _index) external returns (uint[] memory) {
        require(_index < nums.length, "index out if range");
        for (uint i = _index;i < nums.length - 1;i++) {
            nums[i] = nums[i+1];
        }
        nums.pop();
        return nums;
    }
    // 删除数组元素--替换数组元素
    function remove2(uint _index) external returns (uint[] memory){
        require(_index < nums.length, "index out if range");
        nums[_index] = nums[nums.length - 1];
        nums.pop();
        return nums;
    }
上一篇 下一篇

猜你喜欢

热点阅读