我想用多维数组在锡兰工作。这是在锡兰计划的吗?如果是这样,我该如何申报?
我想在 Ceylon 中使用这个构造,如下面的 Java 所示:
int x = 5;
int y = 5;
String[][] myStringArray = new String [x][y];
myStringArray[2][2] = "a string";
我想用多维数组在锡兰工作。这是在锡兰计划的吗?如果是这样,我该如何申报?
我想在 Ceylon 中使用这个构造,如下面的 Java 所示:
int x = 5;
int y = 5;
String[][] myStringArray = new String [x][y];
myStringArray[2][2] = "a string";
首先,考虑您是否真的需要一个数组(即具有固定长度和可修改元素的东西),或者列表(或列表的列表)或映射是否更好。尽管从您的示例来看,您似乎需要修改。
在 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 个不同的元素。
我喜欢 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);
}