1

x我有两个数组:y 我想检查是否x包含在y.

rego 中没有 contains() 函数。

接下来我尝试创建与 contains() 函数等效的数学函数:

x ⊆ y ⇔ (x ⋂ y) == x.

所以我尝试执行以下操作:

z := x & y
x == z

但这会产生以下错误:

rego_type_error: and: invalid argument(s) have: (array[any], any, ???) want: (set[any], set[any], set[any])

那么我该怎么做呢?

4

1 回答 1

1

集合操作仅适用于.. 好吧,集合 :) 如果您正在创建x并且 y作为新集合(仅使用{...}而不是[...]),您的示例应该可以工作。如果x和是数组-y就像从input

xs := {e | e := x[_]}
ys := {e | e := y[_]}

然后使用xsys作为集合。另一方面,如果您真的想使用数组(例如在排序和重复值很重要时),您可以执行以下操作:

contained {
    y[i]
    x == array.slice(y, i, i + count(x))
}

这将遍历y数组,并为每个项目创建一个与数组长度相同的yfrom和 to 切片,如果一个这样的切片等于 ,则返回 true 。ixx

于 2021-08-29T18:22:26.323 回答