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

固定数组

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

pragma solidity ^0.4.16;

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

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

通学智能合约(九)--数组_第1张图片

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

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。

通学智能合约(九)--数组_第2张图片

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

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

通学智能合约(九)--数组_第3张图片

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

可变长度数组

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

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

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

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

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);
   }
 
}

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

你可能感兴趣的:(区块链之变化,区块链,智能合约)