如何在 Chapel 中执行内联 IF 数组构造函数?
How to do an inline IF array constructor in 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);
但是,我想将 e[d] < p
中的 d
提取到 vs
中。有没有类似的方法?
vs = [i in d where e[i] < p]
writeln(vs); // {2,3,5,7,8}
这应该会给你想要的结果:
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);
}
我想根据条件创建域的子集。我可以做一个循环,但我想看看我是否可以使用内联 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);
但是,我想将 e[d] < p
中的 d
提取到 vs
中。有没有类似的方法?
vs = [i in d where e[i] < p]
writeln(vs); // {2,3,5,7,8}
这应该会给你想要的结果:
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);
}