Solidity 练习:数组

2022-12-29 Web3 Solidity

# 一、题目说明

数组可以具有固定或动态的大小。固定大小的数组可以在 Memory 中初始化。

数组有以下几个功能。

  • push:将新元素添加到数组的末尾。
  • pop:从数组末尾删除最后一个元素,将数组长度缩小 1。
  • length:数组的当前长度。

# 二、任务列表

  1. 编写一个函数 get(uint i),返回数组第 i 个元素,该函数是 external 和 view 的。
  2. 编写一个 external 的函数 push,输入一个 uint 类型的 x,把 x 添加到数组 arr 最后。
  3. 编写一个 external 的函数 remove(uint i),把数组的第 i 个元素删除。
  4. 编写一个函数 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

# 四、参考资料

Last Updated: 2023-01-28 4:31:25