我想基于条件创建域的子集。我可以做一个循环,但我想看看我是否可以使用内联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}
答案 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);
}