首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ceylon中的多维数组

Ceylon中的多维数组
EN

Stack Overflow用户
提问于 2018-03-25 01:03:02
回答 2查看 90关注 0票数 1

我想在锡兰工作的多维数组。这是在锡兰计划的吗?如果是这样,我该如何声明它呢?

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

代码语言:javascript
复制
int x = 5;
int y = 5;

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

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

回答 2

Stack Overflow用户

发布于 2018-03-25 19:46:41

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

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

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

代码语言:javascript
复制
Array.ofSize(y, "hello")

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

代码语言:javascript
复制
value myStringArray = Array.ofSize(x, Array.ofSize(y, "hello"));

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

代码语言:javascript
复制
value myStringArray = Array({ Array.ofSize(y, "hello") }.repeat(x));

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

票数 3
EN

Stack Overflow用户

发布于 2018-03-29 20:54:17

我喜欢保罗的答案,但这里有一种替代方法,它允许我们使用理解来填充2D数组:

代码语言:javascript
复制
//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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49467437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档