Depset

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

一种支持高效合并操作且具有指定的遍历顺序的专用数据结构。通常用于在规则和方面累积传递依赖项的数据。如需了解详情,请参阅此处

Depset 的元素必须可以进行哈希处理,并且其类型必须相同(由内置类型 (x) 函数所定义),但 Desset 不只是哈希集,也不支持快速成员资格测试。如果需要常规数据集数据类型,您可以使用字典将其模拟,其中所有键都映射到 True

偏移量是不可变的。应使用构造函数创建这些函数,并通过 transitive 参数将其与其他增量合并或扩充。

order 参数决定了为了将 depset 转换为可迭代项而执行的遍历类型。有四种可能的值:

  • "default"(以前称为 "stable"):未指定顺序(但具有确定性)。
  • "postorder"(以前称为 "compile"):从左到右排列顺序。确切地说,这会以递归方式遍历所有最左边的子项,然后遍历最左边的直接元素。
  • "preorder"(以前称为 "naive_link"):从左到右预订。确切地说,这会遍历最左边的直接元素,然后以递归方式遍历最左边的子元素。
  • "topological"(以前称为 "link"):从根到叶的拓扑排序。我们无法保证从左到右排列。

只有当两个 Depset 的顺序相同,或者其中一个 Deset 具有 "default" 顺序时,才可合并两个 Depset。在后一种情况下,生成的 deorder 将与另一个订单的顺序相同。

Desets 可能包含重复值,但在迭代时(使用 to_list() 时),系统会抑制这些重复值。重复值可能会干扰排序语义。

会员

收件人列表

list depset.to_list()

按照偏移遍历顺序返回元素列表(不含重复项)。请注意,对于多次添加到“deset”的元素,其顺序未指定(但具有确定性)。此外,系统也不会为 "default" 有序的子项以及其顺序与父项的子项的子元素指定顺序。该列表是一个副本;对它进行修改不会对 depset 产生任何影响,反之亦然。