一種特殊資料結構,可支援高效率的合併作業,並具有明確定義的檢索順序。通常用於從規則和面向收集資料,透過傳遞依附元件。詳情請參閱這篇文章。
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,反之亦然。