如何在Chapel中建立内联IF数组构造函数?

时间:2017-10-12 11:36:49

标签: list-comprehension chapel

我想基于条件创建域的子集。我可以做一个循环,但我想看看我是否可以使用内联if。

重新创建数组d看起来像

var d = {1..8};
var e =  [0.875, 0.625, 0.625, 1.0, 0.625, 0.875, 0.625, 0.625];
var p = 0.7;

var vs = for i in d do i;
writeln(" vs: ", vs);

但是,我想将d e[d] < p提取到vs。有没有像这样的方法?

vs = [i in d where e[i] < p]
writeln(vs);  // {2,3,5,7,8}

1 个答案:

答案 0 :(得分:3)

这应该会给你想要的结果:

var vs = for i in d do
           if e[i] < p then i;

请注意,vs是一个数组,而不是一个域。如果您想要一个可以使用的域,则应使用关联域:

var vs : domain(int) = for i in d do
                         if e[i] < p then i;

这个例子将变成这样的东西:

var vs : domain(int);
for i in d {
  if e[i] < p then
    vs.add(i);
}