我想在锡兰工作的多维数组。这是在锡兰计划的吗?如果是这样,我该如何声明它呢?
我想在Ceylon中使用这个结构,如下面的Java所示:
int x = 5;
int y = 5;
String[][] myStringArray = new String [x][y];
myStringArray[2][2] = "a string";发布于 2018-03-25 19:46:41
首先,考虑是否真的需要数组(即具有固定长度和可修改元素的数组),或者列表(或列表列表)或映射可能更好。尽管从您的示例来看,您似乎需要修改。
在JVM中,“多维数组”只是一个数组的数组。
在Java语言中,new String[y]创建了一个填充了null条目的数组,这在Ceylon中是不允许的String类型的值。因此,您可以拥有一个String?数组(允许使用null),也可以使用其他值预先填充数组,例如使用Array.ofSize(...)
Array.ofSize(y, "hello")这同样适用于数组的数组。我们可以这样做:
value myStringArray = Array.ofSize(x, Array.ofSize(y, "hello"));虽然在2D数组的每个“行”中都有相同的数组,但这并不是我们想要的(因为替换myStringArray[2][2]会将所有条目替换为2作为第二个坐标)。这里的另一个Array构造函数很有用,它接受一个iterable:
value myStringArray = Array({ Array.ofSize(y, "hello") }.repeat(x));这利用了可迭代枚举延迟地计算其参数的事实,因此数组构造函数将获得x个不同的元素。
发布于 2018-03-29 20:54:17
我喜欢保罗的答案,但这里有一种替代方法,它允许我们使用理解来填充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);
}https://stackoverflow.com/questions/49467437
复制相似问题