You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rego中如何判断一个数组是否完全包含于另一个数组

你遇到的类型报错是因为Rego中的&交集运算符仅支持*集合(set)*类型的操作,你传入的x、y是数组(array)类型,不符合运算符要求的参数类型。

方案1:集合运算实现(适合不关心元素顺序、重复次数的场景)

先将数组转换为集合,再用子集判断逻辑即可:

# 将数组转换为集合,自动去重
set_x := {elem | elem := x[_]}
set_y := {elem | elem := y[_]}

# 执行子集判断
x_subset_of_y := set_x & set_y == set_x

方案2:遍历判断实现(适合需要校验x中每个元素都在y中存在的场景)

如果不需要做去重处理,直接用Rego内置的every关键字遍历校验更直观:

x_all_contained_in_y {
    # 遍历x的所有元素,每个元素都要满足在y中存在的条件
    every item in x {
        item in y
    }
}

如果需要严格匹配元素的重复次数(比如x包含2次字符串a,要求y也至少包含2次a才判定为包含),可以额外增加元素计数逻辑:

# 统计数组中各元素的出现次数
count_x := count_by(x, function(item) { item })
count_y := count_by(y, function(item) { item })

x_full_contained_in_y {
    every key in count_x {
        count_y[key] >= count_x[key]
    }
}

内容的提问来源于stack exchange,提问作者Stack Overflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:57:04