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