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

Rego中如何合并对象内的集合类型值?

Rego嵌套对象集合合并问题解决方案

给定输入对象:

input_data = {
  "1": {
    "bob": {"a", "b", "c"},
    "kim": {"c", "e", "f"}
  },
  "2": {
    "may": {"x", "k"},
    "kim": {"y"}
  }
}

需要将每个顶层键(如"1"、"2")对应的内层对象中所有集合的值合并为单个集合,期望输出:

output = {
  "1": {"a", "b", "c", "e", "f" },
  "2": {"x", "k", "y"}
}

你之前尝试的代码报错eval_conflict_error: object keys must be unique,原因是原写法会为每个集合元素生成一个重复的顶层键值对,违反了Rego对象键必须唯一的规则。

正确实现代码

merge_sets(input_data) := result {
  result := { key: merged |
    some key
    nested := input_data[key]
    merged := { val | some _, set; nested[_] = set; val in set }
  }
}

代码说明

  1. 外层遍历输入对象的每个顶层键key,确保每个键只被处理一次
  2. 对每个顶层键,获取对应的内层嵌套对象nested
  3. 通过集合推导式遍历内层对象的所有集合,将所有元素收集到merged集合中
  4. 最终构造出顶层键与合并后集合一一对应的结果对象

调用merge_sets(input_data)即可得到期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:03:12