美文网首页
4. Solidity:引用类型变量:数组

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

作者: 泡泡龙吐泡泡 | 来源:发表于2023-09-25 13:41 被阅读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 数组操作

  • length: 获取数组长度
  • push() & push(x): 数组长度+1,push() 为添加元素默认值,push(x)为添加指定元素值
  • delete: 数组长度不变,索引对应元素置为默认值
  • pop(): 数组元素-1,删除末尾元素
    代码示例:
    // 数组操作 
    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 内存中的数组

  • 内存中创建数组使用new关键字
  • 必须指定数组长度(内存中创建的数组为定长数组)
    示例代码:
    // 内存中的数组
    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方法只会将数组中的元素置为默认值,并不会将数组中的元素从数组中移出,即不会改变数组长度。如果想删除数组中的指定元素,根据业务需求不同,可以有移动数组元素和替换数组元素两种方法。

  • 移动数组元素:适用于对数组元素顺序有要求的情况(不改变数组元素顺序,但是消耗较多gas fee)
    // 删除数组元素--移动数组元素
    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;
    }
  • 替换数组元素:适用于对于数组元素顺序没有要求的情况(消耗较少gas fee,但是改变了数组元素顺序)
    // 删除数组元素--替换数组元素
    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;
    }

相关文章

  • Solidity编写智能合约笔记-引用类型

    Solidity是静态类型语言,编译时需明确变量的类型,变量类型包括有值类型与引用类型 引用类型(Referenc...

  • 浅谈Solidity: 5. 变量数据存储和作用域 storag

    Solidity中的引用类型:引用类型(Reference Type):包括数组(array),结构体(struc...

  • Note 3 Swift (1)

    Swift学习笔记 变量与常量 变量 常量 值类型与引用类型 值类型 引用类型 数组与字典 数组 字典

  • 内存中的数组

    数组是一种观念引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。 数组引用变量只是一...

  • Solidity编写智能合约笔记-值类型

    Solidity是静态类型语言,编译时需明确变量的类型,类型分类有值类型与引用类型 值类型(Value Type)...

  • Java(四)--一维数组

    声明数组:elementType [] arrayRefvar;(元素类型[] 数组引用变量)例如:double ...

  • 引用类型数组

    数组是对象 在Java中,数组属于引用类型数据数组数据在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指...

  • 温驭臣浅谈Solidity: 6. 引用类型, array, s

    数组 array:数组(Array)是solidity常用的一种变量类型,用来存储一组数据(整数,字节,地址等等)...

  • Java数组类型

    数组类型和数组引用变量详解 数组类型为什么要用数组?Java数组的两大特征:定义数组时,不能指定数组的长度变量分为...

  • 数据类型

    一.基本数据类型 二,引用数据类型 引用类型指向一个对象,指向对象的变量是引用变量,对象、数组都是引用数据类型如S...

网友评论

      本文标题:4. Solidity:引用类型变量:数组

      本文链接:https://www.haomeiwen.com/subject/ujwfbdtx.html