首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Chapel中创建不规则数组

如何在Chapel中创建不规则数组
EN

Stack Overflow用户
提问于 2018-01-04 07:26:27
回答 1查看 65关注 0票数 2

我尝试创建不同长度的“数组数组”。例如

代码语言:javascript
复制
A = [[1 2 5 ]
     [3 5]
     [2 6 9]]

由于Chapel是强类型的,我不知道如何声明和填充A。我的第一个用途是遍历A并找到一组唯一的元素,如下所示

代码语言:javascript
复制
[1 2 3 5 6 9]

因此,查看构造和使用的示例会很有用。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-04 09:17:10

我们称此功能为“天际线”数组或“锯齿”数组。虽然Chapel目前没有直接实现它,但它很容易通过记录来实现。例如,外部数组的每个元素可以是携带相应内部数组及其域的记录:

代码语言:javascript
复制
record InnerArray {
  var dom: domain(1);  // starts out empty
  var arr: [dom] int;

  // Optional function: when printing an InnerArray, do not show the domain.
  proc writeThis(c: channel) { c.write("["); c.write(arr); c.write("]");  }
}

proc initElem(ref dest: InnerArray, src: []) {
  dest.dom = src.domain;
  dest.arr = src;
}

var A: [1..3] InnerArray;

initElem(A[1], [1,2,5]);
initElem(A[2], [3,5]);
initElem(A[3], [2,6,9]);

// The default printout invokes writeThis on each element of A.
writeln(A);

// To iterate over all inner elements, need nested loops.
// If appropriate, either/both can be "forall".
for outer in A do
  for inner in outer.arr do
    writeln(inner);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48086588

复制
相关文章

相似问题

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