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

刺骨的言语ヽ痛彻心扉 2022-10-29 12:28 238阅读 0赞
固定数组

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

  1. pragma solidity ^0.4.16;
  2. contract FixArray{
  3. uint[5] arr;
  4. function getDefaultArrContent() view returns(uint[5]){
  5. return arr;
  6. }
  7. }

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

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

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

  1. pragma solidity ^0.4.16;
  2. contract FixArray{
  3. uint[5] arr;
  4. function init(){
  5. arr[0] = 100;
  6. arr[1] = 200;
  7. }
  8. function getArrayContent() view returns(uint[5]){
  9. return arr;
  10. }
  11. }

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

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

  1. pragma solidity ^0.4.16;
  2. contract FixArray{
  3. uint[5] arr = [1,2,3,4,5];
  4. function init(){
  5. arr[0] = 100;
  6. arr[1] = 200;
  7. }
  8. function sumArr() view returns(uint){
  9. uint sum = 0;
  10. for(uint i = 0;i< arr.length;i++){
  11. sum += arr[i];
  12. }
  13. return sum;
  14. }
  15. }

对于上面的代码而言,我们先直接通过字面量的方式初始化一个固定数组。然后利用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)\]

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

可变长度数组

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

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

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

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

  1. pragma solidity ^0.4.16;
  2. contract DynamicArray{
  3. uint[] arr = [1,2,3,4,5];
  4. function changeLength(){
  5. arr.length = 1;
  6. }
  7. function changeLength2(){
  8. arr.length = 10;
  9. }
  10. function getContent() view returns(uint[]){
  11. return arr;
  12. }
  13. function getLength() view returns(uint){
  14. return arr.length;
  15. }
  16. function push(){
  17. arr.push(6);
  18. }
  19. }

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

发表评论

表情:
评论列表 (有 0 条评论,238人围观)

还没有评论,来说两句吧...

相关阅读