检查数组是不是包含在 rego 中的另一个中
Posted
技术标签:
【中文标题】检查数组是不是包含在 rego 中的另一个中【英文标题】:Check if array contained within another in rego检查数组是否包含在 rego 中的另一个中 【发布时间】:2021-10-26 08:21:23 【问题描述】:我有两个数组:x
和 y
我想检查x
是否包含在y
中。
rego 中没有 contains() 函数。
接下来我尝试创建与 contains() 函数等效的数学函数:
x ⊆ y ⇔ (x ⋂ y) == x
.
所以我尝试执行以下操作:
z := x & y
x == z
但这会产生以下错误:
rego_type_error: and: 无效参数 有: (array[any], any, ???) 想要: (set[any], set[any], set[any])
那我该怎么做呢?
【问题讨论】:
【参考方案1】:Set operations 仅适用于.. 好吧,设置 :) 如果您创建 x
和 y
作为新设置(只需使用 ...
而不是 [...]
)您的示例应该可以工作。如果 x
和 y
是数组 - 就像引用来自 input
的值时经常出现的情况一样 - 您可以使用集合推导来转换它们,例如:
xs := e | e := x[_]
ys := e | e := y[_]
然后使用xs
和ys
作为集合。另一方面,如果你真的想使用数组(比如在排序和重复值很重要的时候),你可以这样做:
contained
y[i]
x == array.slice(y, i, i + count(x))
这将遍历y
数组,并为每个项目从i
创建一个与x
数组长度相同的y
切片,如果一个这样的切片等于x
.
【讨论】:
以上是关于检查数组是不是包含在 rego 中的另一个中的主要内容,如果未能解决你的问题,请参考以下文章
如何检查数组字段是不是包含唯一值或 MongoDB 中的另一个数组?
如何检查向量的所有元素是不是在 Eigen c++ 中的另一个向量中?
有没有办法检查一个数组的任何内容是不是在 Roblox 的另一个数组中