1

我想用多维数组在锡兰工作。这是在锡兰计划的吗?如果是这样,我该如何申报?

我想在 Ceylon 中使用这个构造,如下面的 Java 所示:

int x = 5;
int y = 5;

String[][] myStringArray = new String [x][y];

myStringArray[2][2] = "a string";
4

2 回答 2

3

首先,考虑您是否真的需要一个数组(即具有固定长度和可修改元素的东西),或者列表(或列表的列表)或映射是否更好。尽管从您的示例来看,您似乎需要修改。

在 JVM 中,“多维”数组只是数组的数组。

在 Java 中,new String[y]创建一个填充了条目的数组,这在 Ceylon 中null是不允许的类型值。String所以你可以有一个数组String?(允许null),或者用其他值预先填充你的数组,例如使用Array.ofSize(...)

Array.ofSize(y, "hello")

这同样适用于数组数组。我们可以这样做:

value myStringArray = Array.ofSize(x, Array.ofSize(y, "hello"));

虽然这将在二维数组的每个“行”中具有相同的数组,但这不是我们想要的(因为替换myStringArray[2][2]会将所有条目替换为 2 作为第二个坐标)。这里的另一个 Array 构造函数很有用,它需要一个可迭代的:

value myStringArray = Array({ Array.ofSize(y, "hello") }.repeat(x));

这利用了可迭代枚举懒惰地评估其参数的事实,因此数组构造函数将获得 x 个不同的元素。

于 2018-03-25T11:46:40.593 回答
1

我喜欢 Paulo 的回答,但这是另一种方法,它允许我们使用理解来填充 2D 数组:

//the size of the square 2D array
value n = 5;

//create it using a nested comprehension
value arr = Array { 
    for (i in 1..n-1) Array { 
        for (j in 0..n-1) 
            i==j then 1 else 0 
    }
};

//display it
for (row in arr) {
    printAll(row);
}
于 2018-03-29T12:54:16.750 回答