depset

回報問題 查看原始碼

這個特殊的資料結構支援高效率的合併作業,而且有明確的遍歷順序。常用於從規則和層面累積遞移依附元件的資料。詳情請參閱這篇文章

depset 的元素必須能夠進行雜湊處理,且所有類型都與內建類型 (由內建類型(x) 函式所定義) 相同,但 desetset 不只是雜湊集,也不支援快速成員測試。如果您需要一般集的資料類型,可以使用字典 (其中所有鍵對應至 True) 來模擬。

集數不可變動。您應使用建構函式函式來建立這類函式,並透過 transitive 引數與其他 DEP 合併或增強。

order 參數會決定將 desetset 轉換成可疊代完成的遍歷種類。可能的值有四種:

  • "default" (原為 "stable"):未指定順序 (但為確定性)。
  • "postorder" (原為 "compile"):從左到右的排序。精確地說,這會以遞迴方式掃遍所有子項,從最左邊到最左邊,直接元素會由左到左。
  • "preorder" (原為 "naive_link"):從左到右預購。精確地說,這會使最直接的元素與最左邊優先,依序往右移動。
  • "topological" (原為 "link"):從根到到葉的拓撲排序。不提供由左至右保證。

只有在兩個集合的順序相同,或是其中一個集合有 "default" 順序時,系統才會合併兩個集合。在後面的例子中,產生的 depset 順序會與其他物件相同。

設定值可能會包含重複的值,但進行疊代時會使用 to_list() 來略過這些值。重複的值可能會幹擾排序語意。

會員

to_list

list depset.to_list()

以 pendset 的周遊順序傳回元素清單,不含重複元素。請注意,對於在集合中多次加入的元素,順序未指定 (但具有確定性)。此外,如果是 "default" 排序的 DEP 和子集的元素,其順序與上層 DEP 集的順序不同,也會指定順序。該清單為複本,修改後對 depset 的影響,反之亦然。