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 的瀏覽順序,傳回不重複的元素清單。請注意,如果元素在 depset 中加入了多次,則順序未指定 (但可確定)。對於 "default" 排序的 depset,以及子 depset 的元素 (其順序與父項 depset 不同),也沒有指定順序。清單是副本,因此修改清單不會影響 depset,反之亦然。