Depset

回報問題 查看原始碼 Nightly · 7.4 . 7.3 7.2 7.1 7.0 6.5

一種特殊資料結構,可支援高效率的合併作業,並具有明確定義的檢索順序。通常用於從規則和面向收集資料,詳情請參閱這裡

depset 的元素必須可進行雜湊運算,且所有元素的類型必須相同 (由內建 type(x) 函式定義),但 depset 並非單純的雜湊集,也不支援快速會員資格測試。如果您需要一般集合資料類型,可以使用字典模擬一個,其中所有鍵都會對應至 True

Depset 無法變更。應使用其建構函式建立,並透過 transitive 引數合併或擴充其他 depset。

order 參數會決定用來將 depset 轉換為可枚舉項目的遍歷類型。可能的值有四種:

  • "default" (舊稱 "stable"):未指定順序 (但可預測)。
  • "postorder" (原為 "compile"):排序後,從左到右。具體來說,這會遞迴地依序從左至右遍歷所有子項,然後再依序從左至右遍歷直接元素。
  • "preorder" (舊稱 "naive_link"):從左到右的預先排序。具體來說,這會先從左側開始逐一檢查直接元素,然後再以遞迴方式逐一檢查子項。
  • "topological" (先前為 "link"):從根層級向下到葉子的順序排序。系統不會保證從左至右的順序。

只有在兩個 depset 有相同順序,或其中一個有 "default" 順序時,才能合併兩個 depset。在後一種情況下,產生的 depset 順序會與其他順序相同。

Depset 可能包含重複的值,但在疊代時 (使用 to_list()) 會隱藏。重複輸入可能會幹擾排序語意。

成員

to_list

list depset.to_list()

以 depset 的檢索順序,傳回不重複的元素清單。請注意,對於加入至位置超過一次的元素,系統不會指定順序 (但確定性)。對於 "default" 排序的 depset,以及其順序與父項偏移不同,子項偏移元素也會指定順序。清單是複本,因此修改清單不會影響 depset,反之亦然。