通学智能合约(九)--数组

本文深入探讨了智能合约中的固定数组和可变长度数组。固定数组在初始化时默认值为0,可通过函数修改指定索引的值。尝试修改固定数组长度会导致编译错误。而可变长度数组支持动态改变长度和添加元素,如通过push方法。总结了数组操作的关键知识点,包括默认值、获取长度和内容、遍历以及内容修改。
摘要由CSDN通过智能技术生成
固定数组

首先我们来看看固定数组的默认值。

pragma solidity ^0.4.16;

contract FixArray{
    
   uint[5] arr;
   
   function getDefaultArrContent() view returns(uint[5]){
       return arr;
   }
 
}

编译执行后,我们可以看到,固定数组初始值都为0.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1mWISiSa-1613311508471)(C:\Users\49178\AppData\Roaming\Typora\typora-user-images\image-20210212100519062.png)]

函数对固定数组初始值进行修改:

pragma solidity ^0.4.16;

contract FixArray{
    
   uint[5] arr;
   
   function init(){
       arr[0] = 100;
       arr[1] = 200;
   }
   
   function getArrayContent() view returns(uint[5]){
       return arr;
   }
 
}

我们先执行init方法,然后在执行获取数组内容方法,会发现结果符合我们的预期0: uint256[5]: 100,200,0,0,0

再者,我们看看对于固定数组内部元素求和。

pragma solidity ^0.4.16;

contract FixArray{
    
   uint[5] arr = [1,2,3,4,5];
   
   function init(){
       arr[0] = 100;
       arr[1] = 200;
   }
   
   function sumArr() view returns(uint){
       uint sum = 0;
       for(uint i = 0;i< arr.length;i++){
           sum += arr[i];
       }
       
       return sum;
   }
 
}

对于上面的代码而言,我们先直接通过字面量的方式初始化一个固定数组。然后利用for循环进行累计求和。

其中的sum += arr[i] 等同于sum = sum+arr[i];最终结果是15,符合我们的预期。

最后,我们再来看看 ,对于固定数组,能否修改它的长度或者是添加元素呢?闭上眼睛,思考30s。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hNINAXHm-1613311508473)(C:\Users\49178\AppData\Roaming\Typora\typora-user-images\image-20210212102624757.png)]

经过我们演示,发现获取固定长度数组是没有任何问题的,但是这样暴力去修改固定数组长度,编译器可是不能答应的。(这里大家可以点选左侧,编译器下方的自动编译,就不能每次都去点编译啦)

最后的最后,我们在来看看是否能够进行push操作呢?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4th1g5Y0-1613311508475)(C:\Users\49178\AppData\Roaming\Typora\typora-user-images\image-20210212102942572.png)]

显然,也是行不通的。在这里,我们的固定数组就告一段落了。

可变长度数组

上面我们说了固定数组,最后提到固定数组是没有办法改变长度和添加元素的,如果有这个诉求,就要引入我们的可变长度数组了

另外,我们上面学了那么多数组,会发现一个规律,就是数组主要就那么几个知识点

  • 默认值与初始化赋值
  • 获取数组长度和数组内容
  • 遍历数组内容
  • 改变数组长度和数组内容

那么我们的可变长数组当然也不例外了。至于初始化、获取数组长度和内容,和我们的固定数组是一样的,这里就不在演示了。主要来看看不一样的改变数组长度和数组内容。如下:

pragma solidity ^0.4.16;

contract DynamicArray{
    
   uint[] arr = [1,2,3,4,5];

   function changeLength(){
        arr.length = 1;
   }
   
   function changeLength2(){
        arr.length = 10;
   }
   
   function getContent() view returns(uint[]){
        return arr;
   }
   
   function getLength() view returns(uint){
        return arr.length;
   }
   
   function push(){
        arr.push(6);
   }
 
}

验证结果,正是说明了固定数组和动态长度数组的差别。在这里,我们一维数组就介绍完了。下节,我们将想大家介绍数组中的二维数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值