不可变长度数组

声明

1
2
3
4
5
pragma solidity ^0.8.0;

contract FixArrayDemo{
uint [3] _nums = [1,2,3];
}

获取数组长度和遍历数组

1
2
3
4
5
6
7
8
9
10
11
12
13
pragma solidity ^0.8.0;

contract FixArrayDemo{
uint [3] _nums = [1,2,3];

function AddOP() view public returns (uint) {
uint result = 0;
for (uint i=0;i<_nums.length;i++){
result += _nums[i];
}
return result;
}
}

修改数组中的元素值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pragma solidity ^0.8.0;

contract ArrayDemo{
uint [3] _nums = [1,2,3];


function AddOP() view public returns (uint) {
uint result = 0;
for (uint i=0;i<_nums.length;i++){
result += _nums[i];
}
return result;
}

}

注:不能向固定数组中添加新元素。

可变长度数组

同样可以声明,获取长度,循环遍历,修改数组中的元素值,与不可变长度数组不同的是[]里面没有数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
pragma solidity ^0.8.0;

contract ArrayDemo{
uint [] _nums = [1,2,3];


function AddOP() view public returns (uint) {
uint result = 0;
for (uint i=0;i<_nums.length;i++){
result += _nums[i];
}
return result;
}
}

修改数组的长度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
pragma solidity ^0.8.0;

contract ArrayDemo{
uint [] _nums = [1,2,3];

//...

function addItem(uint v) public {
_nums.push(v);
}

function popItem() view public returns(uint){
return _nums.pop();
}

function visitItem(uint idx) view public returns(uint){
require(idx<=_nums.length-1,"out of index.");
return _nums[idx];
}

function deleteItem(uint idx) public{
delete(_nums[idx]);
}

// 删除数组元素,并且长度减1
function removeAt(uint idx) public {
require(idx>=0 && idx<arr.length);
delete(_nums[idx]);
arr.pop();
}

function showArr() view public returns(uint[] memory){
return _nums;
}

}