solidity定长数组和动态数组

简介: solidity定长数组和动态数组

固定长度的数组

固定长度数组声明

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

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

可通过数组的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方法向动态数组中添加元素。


目录
相关文章
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
存储 Ubuntu 数据库
Dockerfile(14) - VOLUME 指令详解
Dockerfile(14) - VOLUME 指令详解
5358 0
|
8月前
|
人工智能 计算机视觉
RT-DETR改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
RT-DETR改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
590 5
RT-DETR改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
|
Go API 开发工具
我的业务不一样,用 go-zero 怎么搞?
我的业务不一样,用 go-zero 怎么搞?
|
传感器 数据采集 网络协议
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
675 4
|
SQL 监控 大数据
DataGrip 面试题及答案整理,最新面试题
DataGrip 面试题及答案整理,最新面试题
345 0
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
1314 0
|
XML 人工智能 Go
VSCode 中使用 vim 操作
为什么要使用 Vim 呢?因为真的很高效啊!!!我已经在代码编辑器和浏览器中都安装了类 Vim 插件来提搞我的操作效率。当熟练使用 Vim 命令之后,真的可以扔掉鼠标了。
1343 0
|
Java
Java8 新特性踩坑篇,java.util.NoSuchElementException: No value present
今天测试老师在测试功能的时候,发现功能提交时居然报No value present错误了。而且还是在其它周边系统上,刚开始以为不是我们系统应该跟我们没关系,直到对方开发老师找过来查日志后,才发现是我写的代码有问题,哭了,还好是测试阶段;原因是我使用了Optional调用Get方法前没有先进行isPresent()判断是否为空,所以导致整个功能报废了;
1588 0
|
Java 区块链 Maven
web3j java版本生成公钥、私钥、地址等实例
web3j java版本生成公钥、私钥、地址等实例
962 0