Solidity 练习:数组
睡不醒的鲤鱼 2022-12-29 Web3 Solidity
# 一、题目说明
数组可以具有固定或动态的大小。固定大小的数组可以在 Memory 中初始化。
数组有以下几个功能。
- push:将新元素添加到数组的末尾。
- pop:从数组末尾删除最后一个元素,将数组长度缩小 1。
- length:数组的当前长度。
# 二、任务列表
- 编写一个函数 get(uint i),返回数组第 i 个元素,该函数是 external 和 view 的。
- 编写一个 external 的函数 push,输入一个 uint 类型的 x,把 x 添加到数组 arr 最后。
- 编写一个 external 的函数 remove(uint i),把数组的第 i 个元素删除。
- 编写一个函数 getLength,返回数组的当前长度,该函数是 external 和 view 的。
# 三、解答代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ArrayBasic {
// Several ways to initialize an array
uint[] public arr;
uint[] public arr2 = [1, 2, 3];
// Fixed sized array, all elements initialize to 0
uint[3] public arrFixedSize;
// Insert, read, update and delete
function examples() external {
// Insert - add new element to end of array
arr.push(1);
// Read
uint first = arr[0];
// Update
arr[0] = 123;
// Delete does not change the array length.
// It resets the value at index to it's default value, in this case 0.
delete arr[0];
// pop removes last element
arr.push(1);
arr.push(2);
// 2 is removed
arr.pop();
// Get length of array
uint len = arr.length;
// Fixed size array can be created in memory
uint[] memory a = new uint[](3);
// push and pop are not available
// a.push(1);
// a.pop(1);
a[0] = 1;
}
function get(uint i) external view returns (uint) {
return arr[i];
}
function push(uint x) external {
arr.push(x);
}
function remove(uint i) external {
delete arr[i];
}
function getLength() external view returns (uint) {
return arr.length;
}
}
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55