4

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

但是,我想将dwhere提取e[d] < pvs. 有没有类似的方法?

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

1 回答 1

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);
}
于 2017-10-12T16:24:11.947 回答