如何在Ballerina中在运行时创建具有动态大小的数组?

How to create an array with dynamic size at runtime in Ballerina?

提问人:Nadeeshan Dissanayake 提问时间:9/20/2023 更新时间:9/21/2023 访问量:50

问:

目前似乎只允许数组类型描述符中数组大小的编译时常量。 例如

const ARR_SIZE = 2;

public function main() {
    int[] arr1 = []; // okay
    int[2] arr2 = []; // okay
    int[ARR_SIZE] arr3 = []; // okay
    int array_size = 4;
    // int[array_size] arr4 = []; // not okay, gives compilation error: "invalid reference expression 'array_size' as array size: expected a constant reference expression"
}

创建大小不是编译时常量的数组的最简单方法是什么?

大小 动态数组 芭蕾舞演员

评论


答:

0赞 Nadeeshan Dissanayake 9/20/2023 #1

从问题中可以看出,数组类型描述符只允许数组大小的编译时常量。因此,无法创建仅在运行时才知道大小的固定长度数组。

您可以做的是创建一个可变长度数组并在运行时更改其长度。如果数组类型具有填充值,则在运行时将数组扩展到特定长度的最简单、最快的方法是使用数组成员赋语句,也可以使用该函数。array:setLength

import ballerina/io;
import ballerina/lang.array;

public function main() {
    int array_size = 4;
    int[] arr = [];
    arr[array_size - 1] = 1;
    io:println(arr); // [0,0,0,1]

    array:setLength(arr, array_size + 3);
    io:println(arr); // [0,0,0,1,0,0,0]

    arr.setLength(array_size - 1);
    io:println(arr); // [0,0,0]
}

否则,我们必须将成员推送到数组,直到获得所需的大小。

import ballerina/io;

public function main() {
    int array_size = 4;
    string:Char[] arr = [];
    // arr[array_size - 1] = "0"; // error: "array of length 0 cannot be expanded into array of length 4 without filler values"

    foreach int i in 0..<array_size {
        arr.push("0");
    }
    io:println(arr); // ["0","0","0","0"]
}

评论

0赞 Sameera Jayasoma 9/20/2023
我认为我们还需要回答如何确保数组不会超过一定大小。