检查数组是不是包含在 rego 中的另一个中

Posted

技术标签:

【中文标题】检查数组是不是包含在 rego 中的另一个中【英文标题】:Check if array contained within another in rego检查数组是否包含在 rego 中的另一个中 【发布时间】:2021-10-26 08:21:23 【问题描述】:

我有两个数组:xy 我想检查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 作为新设置(只需使用 ... 而不是 [...])您的示例应该可以工作。如果 xy 是数组 - 就像引用来自 input 的值时经常出现的情况一样 - 您可以使用集合推导来转换它们,例如:

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

然后使用xsys 作为集合。另一方面,如果你真的想使用数组(比如在排序和重复值很重要的时候),你可以这样做:

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

这将遍历y 数组,并为每个项目从i 创建一个与x 数组长度相同的y 切片,如果一个这样的切片等于x.

【讨论】:

以上是关于检查数组是不是包含在 rego 中的另一个中的主要内容,如果未能解决你的问题,请参考以下文章

如何检查数组字段是不是包含唯一值或 MongoDB 中的另一个数组?

如何检查向量的所有元素是不是在 Eigen c++ 中的另一个向量中?

有没有办法检查一个数组的任何内容是不是在 Roblox 的另一个数组中

如何检查时间是不是大于或小于PLSQL中的另一个时间

检查数组是不是包含另一个数组及其在 DART/Flutter 中的位置

检查两个 3D numpy 数组是不是包含重叠的 2D 数组