首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用for循环初始化顺序值?

用for循环初始化顺序值?
EN

Stack Overflow用户
提问于 2017-09-06 20:34:08
回答 3查看 56关注 0票数 2

是否有任何方法来初始化一个顺序值,而不是在一个人的斜线?

比如,我可以声明它,然后使用一个for循环来逐步填充它吗?

由于所有这些都可能发生在类体中,一旦类实例构造阶段完成,Sequential值的真正不可变性就可以启动。

示例:

代码语言:javascript
复制
Sequential<String> strSeq;

for (i in span(0,10)) {
    strSeq[i] = "hello";
}

这段代码不起作用,因为我得到了这个错误:

错误:(12,9)锡兰:索引表达式的非法接收类型:“顺序”不是“KeyedCorrespondenceMutator”或“IndexedCorrespondenceMutator”的子类型

所以我可以得出结论,序列必须在一条语句中指定,对吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-06 20:51:41

用于创建序列文字接受的方括号不仅接受逗号分隔的值列表,而且还用于理解:

代码语言:javascript
复制
String[] strSeq = [for (i in 0..10) "hello"];

你也可以同时做这两件事,只要理解是最后一次:

代码语言:javascript
复制
String[] strSeq = ["hello", "hello", for (i in 0..8) "hello"];

在这种特殊情况下,您还可以这样做:

代码语言:javascript
复制
String[] strSeq = ["hello"].repeat(11);

您还可以通过嵌套获得序列序列:

代码语言:javascript
复制
String[][] strSeqSeq = [for (i in 0..2) [for (j in 0..2) "hello"]];

您可以做笛卡儿积(注意,这里嵌套的for-解析式不在方括号中):

代码语言:javascript
复制
[Integer, Character][] pairs = [for (i in 0..2) for (j in "abc") [i, j]];

Foo[]Sequential<Foo>的缩写,x..y的意思是span(x, y)

票数 3
EN

Stack Overflow用户

发布于 2017-09-06 20:52:51

是的,有几种语言保证取决于顺序对象的不可变性,因此这种语言必须保证不变性--它不能仅仅相信在初始化完成后您不会对其进行变异:)

通常,在这种情况下,您所做的是构建某种集合(例如,从ceylon.collection生成的ceylon.collection的 ),随您的意愿对其进行变异,然后在完成后获取它的.sequence()

您的具体案例也可以作为顺序文字中的理解写成:

代码语言:javascript
复制
String[] strSeq = [for (i in 0..10) "hello"];
票数 4
EN

Stack Overflow用户

发布于 2017-09-06 22:05:28

如果您预先知道要创建的序列的大小,那么一个非常有效的方法是使用Array

代码语言:javascript
复制
value array = Array.ofSize(11, "");
for (i in 0:11) {
    array[i] = "hello";
}
String[] strSeq = array.sequence();

另一方面,如果您不预先知道大小,那么,正如Lucas所描述的,您需要使用以下两种方法之一:

  • 理解,或
  • 某种可增长的数组,如ArrayList
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46083902

复制
相关文章

相似问题

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