资讯专栏INFORMATION COLUMN

solidity定长数组和动态数组

tinysun1234 / 1183人阅读

摘要:固定长度的数组固定长度数组声明直接在定义数组的时候声明固定长度数组的值可通过数组的属性来获得数组的长度,进而进行遍历操作。动态数组获取长度方式与静态数组一直,但动态数组可以直接修改数组长度,而不会出现编译不通过的情况。

固定长度的数组 固定长度数组声明

直接在定义数组的时候声明固定长度数组的值:

uint[5] fixedArr = [1,2,3,4,5];

可通过数组的length属性来获得数组的长度,进而进行遍历操作。

// 通过for循环计算数组值的总和
function sum() public view returns (uint) {
    uint total = 0;
    for(uint i = 0; i < fixedArr.length; i++) {
        total += fixedArr[i];
    }
    return total;
}

固定长度数组无法修改数组长度,否则编译直接会报错:

TypeError: Expression has to be an lvalue.
fixedArr.length = len;

但可对数组中的值进行修改。

function updateValue(uint index,uint value) public {
    fixedArr[index] = value;
}
可变长度数组

可变长度类型数组的声明:

uint[] unfixedArr = [1,2,3,4,5];
// 或
uint[] unfixedArr;

可变长度数组也可通过同样的方法进行遍历求和:

// 通过for循环计算数组值的总和
function sum() public view returns (uint) {
    uint total = 0;
    for(uint i = 0; i < unfixedArr.length; i++) {
        total += unfixedArr[i];
    }
    return total;
}

其中第二种情况未声明数组内容时,可通过直接通过push向数组中添加值,或初始化一个数组然后再赋值。

unfixedArr.push(1);
或
unfixedArr = new uint[](1); 
unfixedArr[0] = 0;

其中第二种方法通过索引进行设置值时,该数组必须先被初始化,否则会抛出异常。

动态数组获取长度方式与静态数组一直,但动态数组可以直接修改数组长度,而不会出现编译不通过的情况。

unfixedArr.length = len;

上面已经可以看到,可以通过push方法向动态数组中添加元素。

原文链接:https://www.choupangxia.com/2...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75760.html

相关文章

  • 智能合约语言Solidity教程系列5 - 数组介绍

    摘要:还需注意的一点是,定长数组,不能与变长数组相互赋值,我们来看下面的代码无法编译已经计划在未来移除这样的限制。的变长数组,可以通过给赋值调整数组长度。的变长数组不支持。 本文首发于深入浅出区块链社区原文链接:智能合约语言Solidity教程系列5 - 数组介绍原文已更新,请读者前往原文阅读 Solidity 教程系列第5篇 - Solidity 数组介绍。Solidity 系列完整的文章...

    draveness 评论0 收藏0
  • 智能合约语言Solidity教程系列1 - 类型介绍

    摘要:本文首发于深入浅出区块链社区原文链接智能合约语言教程系列地址类型介绍原文已更新,请读者前往原文阅读现在的中文文档,要么翻译的太烂,要么太旧,决定重新翻译下。枚举类型应至少有一名成员。 本文首发于深入浅出区块链社区原文链接:智能合约语言 Solidity 教程系列2 - 地址类型介绍原文已更新,请读者前往原文阅读 现在的Solidity中文文档,要么翻译的太烂,要么太旧,决定重新翻译下。...

    andycall 评论0 收藏0
  • solidity的delete操作汇总

    摘要:删除枚举类型时,会将其值重置为序号为的值。删除结构体删除结构体,会将所有成员变量置为初值。删除数组对于定长数组,删除时,是将数组内所有元素置为初值。注意事项删除的本质是初始化变量。但可对其引用的对象进行操作。 简介 Solidity中的特殊操作符delete用于释放空间,为鼓励主动对空间的回收,释放空间将会返还一些gas。 delete操作符可以用于任何变量,将其设置成默认值0。 删除...

    Eminjannn 评论0 收藏0

发表评论

0条评论

tinysun1234

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<