F# 集合型別
您可以檢閱本主題中,您可以判斷哪一個F#集合型別最適合特定需求。 這些集合型別與.NET Framework中的集合型別不同,例如在 System.Collections.Generic 命名空間,因為F#集合型別從一種函式程式設計方式來設計而不是物件導向的遠近景深。 更明確地說,只有陣列集合不可變動的項目。 因此,例如,當您修改集合時,您會建立已修改的集合執行個體而不是修改原始集合。
集合型別不需要在資料結構中的型別也不同物件中。 資料結構(例如雜湊表、連結清單和陣列具有不同的效能特性和一組不同的可用的作業。
F#集合型別
下表顯示F#集合型別。
型別 |
描述 |
相關連結 |
---|---|---|
相同型別的項目已排序的,而且所有的系列。 實作,連結串列(Linked List)。 |
||
是所有相同型別連續資料項目的固定大小,則為以零起始的,可變動集合。 |
||
可以是任何一個型別項目的邏輯字型。 序列是特別有用,如果您有大型時,指令碼的資料集合,但不需要使用所有項目。 個別序列項目計算只在需要時,因此,序列優於清單可以執行,如果不是使用所有的項目。 seq<'T>序列由型別所表示,這是IEnumerable<T>的別名。 因此,可以將實作 IEnumerable<T> 的任何 .NET Framework 型別當成序列使用。 |
||
項目已不變的字典。 項目是依索引鍵來存取。 |
||
根據二進位樹狀目錄中的不可變集合,其中的比較是F#結構化比較函式,可能使用 IComparable 介面實作關鍵值的值。 |
函式表
本節將比較適用於F#集合型別的函式。 提供函式的計算的複雜屬性,其中N是第一個集合的大小,因此, M是第二個集合的大小,則為,如果存在的話)。 破折號(-)表示這個函式無法在集合中。 由於序列延遲評估,這類函式Seq.distinct可能是O (1),因為它會立即傳回,不過,它仍會影響這個序列的效能,並列舉型別。
Function |
陣列 |
List |
序列 |
對應 |
Set |
描述 |
---|---|---|---|---|---|---|
append |
O (M) |
O (N) |
O (N) |
- |
- |
傳回包含第二個集合的項目之後的第一個集合項目的新集合。 |
新增 |
- |
- |
- |
O (log) N |
O (log) N |
傳回項目的新集合加入。 |
average |
O (N) |
O (N) |
O (N) |
- |
- |
傳回項目的平均集合中的。 |
averageBy |
O (N) |
O (N) |
O (N) |
- |
- |
傳回所提供的函式之結果的平均值套用至每一個項目。 |
blit |
O (N) |
- |
- |
- |
- |
複製陣列的一部分。 |
cache |
- |
- |
O (N) |
- |
- |
評估順序的存放區項目。 |
cast |
- |
- |
O (N) |
- |
- |
將的項目轉換成指定的型別。 |
choose |
O (N) |
O (N) |
O (N) |
- |
- |
將指定的函式 f 套用至清單的每一個項目 x。 傳回包含每個項目之結果 Some(f(x))函式傳回的清單。 |
collect |
O (N) |
O (N) |
O (N) |
- |
- |
將指定的函式套用至集合的每個項目,串連所有結果,並傳回結合的清單。 |
compareWith |
- |
- |
O (N) |
- |
- |
使用指定的比較函式,比較兩個序列,依項目。 |
concat |
O (N) |
O (N) |
O (N) |
- |
- |
將指定之列舉的列舉結合成單一串連的列舉。 |
contains |
- |
- |
- |
- |
O (log) N |
如果集合包含指定的項目,則傳回true。 |
containsKey |
- |
- |
- |
O (log) N |
- |
測試是否會反映在對應的網域。 |
count |
- |
- |
- |
- |
O (N) |
傳回集合中項目的數目。 |
countBy |
- |
- |
O (N) |
- |
- |
將索引鍵產生函式套用至序列的每個元素,並傳回產生唯一索引鍵及其產生的數字在原始序列的序列。 |
copy |
O (N) |
- |
O (N) |
- |
- |
複製集合。 |
create |
O (N) |
- |
- |
- |
- |
建立一開始都具有指定值的陣列整個項目。 |
delay |
- |
- |
O (1) |
- |
- |
傳回序列的指定延遲規格所建置的序列。 |
difference |
- |
- |
- |
- |
M * O (log) N |
傳回與第一個集合中的第二個集合內項目的新集合。 |
distinct |
O () * 1 |
傳回序列,根據項目上的泛型雜湊和等式比較,這個序列不包含重複的項目。 如果項目出現在序列中多次,最後一個項目都會遭捨棄。 |
||||
distinctBy |
O () * 1 |
傳回不根據索引鍵的泛型雜湊和相等比較包含重複項目的序列指定索引鍵產生函式傳回。 如果項目出現在序列中多次,最後一個項目都會遭捨棄。 |
||||
empty |
O (1) |
O (1) |
O (1) |
O (1) |
O (1) |
建立空的集合。 |
exists |
O (N) |
O (N) |
O (N) |
O (log) N |
O (log) N |
測試序列的任何項目是否滿足指定的述詞。 |
exists2 |
O (最小值(N, M)) |
- |
O (最小值(N, M)) |
測試是否有任何對應輸入序列中成對項目是否都滿足指定的述詞。 |
||
fill |
O (N) |
設定陣列的元素範圍設定為指定值。 |
||||
filter |
O (N) |
O (N) |
O (N) |
O (N) |
O (N) |
傳回包含集合只能滿足指定的述詞傳回 true的新集合。 |
find |
O (N) |
O (N) |
O (N) |
O (log) N |
- |
傳回第一個指定之函式會傳回 true 的項目。 如果沒有此類項目存在,則傳回 KeyNotFoundException。 |
findIndex |
O (N) |
O (N) |
O (N) |
- |
- |
傳回陣列中滿足所指定述詞之第一個元素的索引。 如果項目不滿足述詞,則引發 KeyNotFoundException 。 |
findKey |
- |
- |
- |
O (log) N |
- |
評估每個對應的函式集合,並傳回函式傳回 true的第一個對應的索引鍵。 如果沒有這類項目,則此函式會引發 KeyNotFoundException。 |
fold |
O (N) |
O (N) |
O (N) |
O (N) |
O (N) |
將函式套用至集合的每一個項目,以透過計算建立累計值引數的執行緒。 如果輸入函數為而且項目為f, i0…,這個函式評估" (… (、、) i0…)在。 |
fold2 |
O (N) |
O (N) |
- |
- |
- |
將函式套用至兩個集合的對應項目,以透過計算建立累計值引數的執行緒。 這些集合的大小必須完全相同。 如果輸入函數為而且項目為f, i0…和j0…jN,這個函式評估" (… (f s i0 j0)...) iN jN。 |
foldBack |
O (N) |
O (N) |
- |
O (N) |
O (N) |
將函式套用至集合的每一個項目,以透過計算建立累計值引數的執行緒。 如果輸入函數為而且項目為f, i0…,這個函式評估f i0 (… (中的) ")。 |
foldBack2 |
O (N) |
O (N) |
- |
- |
- |
將函式套用至兩個集合的對應項目,以透過計算建立累計值引數的執行緒。 這些集合的大小必須完全相同。 如果輸入函數為而且項目為f, i0…和j0…jN,這個函式評估f i0 j0 (… (在jN)的")。 |
forall |
O (N) |
O (N) |
O (N) |
O (N) |
O (N) |
測試集合的所有項目是否都滿足指定的述詞。 |
forall2 |
O (N) |
O (N) |
O (N) |
- |
- |
測試集合的所有對應項目是否配對方式是否都滿足指定的述詞。 |
取得/第n |
O (1) |
O (N) |
O (N) |
- |
- |
傳回集合的項目指定其索引。 |
head |
- |
O (1) |
O (1) |
- |
- |
傳回集合中的第一個項目。 |
init |
O (N) |
O (N) |
O (1) |
- |
- |
建立集合指定的維度和用於計算項目的產生器函式。 |
initInfinite |
- |
- |
O (1) |
- |
- |
產生,則為,如果重複執行,傳回的連續項目會呼叫指定的函式的序列。 |
intersect |
- |
- |
- |
- |
O (log N *記錄M) |
計算兩個集合的交集。 |
intersectMany |
- |
- |
- |
- |
O (N1 * N2…) |
計算集合序列的交集。 這個序列不可以是null。 |
isEmpty |
O (1) |
O (1) |
O (1) |
O (1) |
- |
如果集合是空的,則傳回, true 。 |
isProperSubset |
- |
- |
- |
- |
M * O (log) N |
傳回 true ,如果第一個集合的所有項目都在第二個集合,因此,第二個集合中至少有一個項目不在第一個集合。 |
isProperSuperset |
- |
- |
- |
- |
M * O (log) N |
傳回 true ,如果第二組的所有項目都在第一個集合,因此,第一個集合中至少有一個項目不在第二個集合。 |
isSubset |
- |
- |
- |
- |
M * O (log) N |
如果第一個集合的所有項目都在第二個集合,則會傳回 true 。 |
isSuperset |
- |
- |
- |
- |
M * O (log) N |
如果第二組的所有項目都在第一個集合,則會傳回 true 。 |
iter |
O (N) |
O (N) |
O (N) |
O (N) |
O (N) |
將指定的函式套用至集合的每一個項目。 |
iteri |
O (N) |
O (N) |
O (N) |
- |
- |
將指定的函式套用至集合的每一個項目。 傳遞給這個函式的整數索引表示項目的。 |
iteri2 |
O (N) |
O (N) |
- |
- |
- |
將指定的函式套用至從兩個陣列中的相符索引進行繪製的一組項目。 傳遞給這個函式的整數索引表示項目的。 兩個陣列都必須具有相同的長度。 |
iter2 |
O (N) |
O (N) |
O (N) |
- |
- |
將指定的函式套用至從兩個陣列中的相符索引進行繪製的一組項目。 兩個陣列都必須具有相同的長度。 |
length |
O (1) |
O (N) |
O (N) |
- |
- |
傳回集合中的項目數目。 |
map |
O (N) |
O (N) |
O (1) |
- |
- |
建置項目都是將指定函式的結果套用至陣列的每個項目的集合。 |
map2 |
O (N) |
O (N) |
O (1) |
- |
- |
建置項目是將指定函式的結果套用至兩個集合的對應項目的集合。 這兩個輸入陣列必須具有相同的長度。 |
map3 |
- |
O (N) |
- |
- |
- |
建置項目是同時套用的函式套用至兩個集合的對應項目的集合。 |
mapi |
O (N) |
O (N) |
O (N) |
- |
- |
建置項目都是將指定函式的結果套用至陣列的每個元素的陣列。 傳遞給這個函式的整數索引表示要進行轉換之項目的索引。 |
mapi2 |
O (N) |
O (N) |
- |
- |
- |
建置項目是將指定函式的結果套用至兩個集合的對應項目的集合,同時也傳遞項目的索引。 這兩個輸入陣列必須具有相同的長度。 |
max |
O (N) |
O (N) |
O (N) |
- |
- |
傳回集合中最大元,比較使用 最大 運算子。 |
maxBy |
O (N) |
O (N) |
O (N) |
- |
- |
傳回集合中最大元,比較使用在函式結果的 最大 。 |
maxElement |
- |
- |
- |
- |
O (log) N |
根據預設會傳回這個集合中最大元可提供這個集合使用。 |
min |
O (N) |
O (N) |
O (N) |
- |
- |
傳回集合的最小項目,比較使用 以分鐘為單位)。 運算子。 |
minBy |
O (N) |
O (N) |
O (N) |
- |
- |
傳回集合的最小項目,比較使用函式結果的 以分鐘為單位)。 運算子。 |
minElement |
- |
- |
- |
- |
O (log) N |
根據預設會傳回這個集合的最低的項目可提供這個集合使用。 |
ofArray |
- |
O (N) |
O (1) |
O (N) |
O (N) |
建立包含的項目與指定的陣列相同的集合。 |
ofList |
O (N) |
- |
O (1) |
O (N) |
O (N) |
建立包含項目和所指定的清單相同的集合。 |
ofSeq |
O (N) |
O (N) |
- |
O (N) |
O (N) |
建立包含的項目與指定的序列相同的集合。 |
pairwise |
- |
- |
O (N) |
- |
- |
傳回每個項目和其先前的版本序列包含輸入序列中的第一個項目以外,只傳回做為第二個項目的前身。 |
partition |
O (N) |
O (N) |
- |
O (N) |
O (N) |
將集合分成兩個集合。 第一個集合包含所指定述詞傳回的項目, true,而第二個集合包含所指定述詞傳回 false的項目。 |
permute |
O (N) |
O (N) |
- |
- |
- |
傳回陣列,這個陣列具有依據所指定排列進行排列的所有項目。 |
pick |
O (N) |
O (N) |
O (N) |
O (log) N |
- |
將指定的函式套用至後續項目,以傳回函式傳回陣列的第一個結果。 如果函式絕不會傳回陣列, KeyNotFoundException 會引發事件。 |
readonly |
- |
- |
O (N) |
- |
- |
建立序列物件所指定的順序委派物件。 這項作業確保型別轉換無法重新探索和轉換原始序列。 例如,如果指定陣列,,則傳回的序列會傳回陣列的項目,不過,您無法將物件轉換成陣列傳回的序列物件。 |
reduce |
O (N) |
O (N) |
O (N) |
- |
- |
將函式套用至集合的每一個項目,以透過計算建立累計值引數的執行緒。 這個函式會將函式開始於前兩個項目,透過這個結果放入函式與第三個項目,依此類推。 函式會傳回最終結果。 |
reduceBack |
O (N) |
O (N) |
- |
- |
- |
將函式套用至集合的每一個項目,以透過計算建立累計值引數的執行緒。 如果輸入函數為而且項目為f, i0…,這個函式評估f i0 (… (1的")。 |
remove |
- |
- |
- |
O (log) N |
O (log) N |
從對應的網域移除項目。 如果項目不存在,則不會引發例外狀況。 |
replicate |
- |
O (N) |
- |
- |
- |
建立含指定長度的清單,將每個項目設為指定的值。 |
rev |
O (N) |
O (N) |
- |
- |
- |
傳回新的清單,這個清單中的項目是以反向順序排列。 |
scan |
O (N) |
O (N) |
O (N) |
- |
- |
將函式套用至集合的每一個項目,以透過計算建立累計值引數的執行緒。 這項作業將函式套用至第二個引數和清單的第一個項目。 作業會將這個結果放入函式與第二個項目一併等等。 最後,作業會傳回中繼結果和最終結果清單。 |
scanBack |
O (N) |
O (N) |
- |
- |
- |
類似返傳送的作業,但傳回中繼和最終結果。 |
singleton |
- |
- |
O (1) |
- |
O (1) |
傳回只產生一個項目的序列。 |
set |
O (1) |
- |
- |
- |
- |
設定陣列的元素設定為指定的值。 |
skip |
- |
- |
O (N) |
- |
- |
傳回序列,這個序列會略過基礎序列的 N 個項目,然後產生序列的其餘項目。 |
skipWhile |
- |
- |
O (N) |
- |
- |
傳回,此物件,或是在反覆查看,略過基礎序列的項目的序列,則所指定述詞傳回 true 然後產生序列的其餘項目時。 |
sort |
N O (log)平均N O (N^2)最糟狀況。 |
O (log) N N |
O (log) N N |
- |
- |
由項目中的值集合。 使用 比較,項目比較。 |
sortBy |
N O (log)平均N O (N^2)最糟狀況。 |
O (log) N N |
O (log) N N |
- |
- |
排序指定的清單使用指定投影所提供的金鑰。 使用 比較,索引鍵比較。 |
sortInPlace |
N O (log)平均N O (N^2)最糟狀況。 |
- |
- |
- |
- |
透過就地變更並使用指定的比較函式排序陣列的項目。 您可以使用 比較,項目比較。 |
sortInPlaceBy |
N O (log)平均N O (N^2)最糟狀況。 |
- |
- |
- |
- |
透過就地變更並使用指定的排序陣列的項目索引鍵。 您可以使用 比較,項目比較。 |
sortInPlaceWith |
N O (log)平均N O (N^2)最糟狀況。 |
- |
- |
- |
- |
透過就地變更並使用指定的比較函式排序陣列的項目做為命令。 |
sortWith |
N O (log)平均N O (N^2)最糟狀況。 |
O (log) N N |
- |
- |
- |
排序集合的項目,則會使用指定的比較函式做為順序並傳回新的集合。 |
sub |
O (N) |
- |
- |
- |
- |
建立包含指定的子範圍傳遞起始索引和長度的指定陣列。 |
sum |
O (N) |
O (N) |
O (N) |
- |
- |
傳回項目的總和集合中的。 |
sumBy |
O (N) |
O (N) |
O (N) |
- |
- |
傳回透過套用函式產生於集合中的每個項目結果的總和。 |
tail |
- |
O (1) |
- |
- |
- |
傳回清單,而不是它的第一個項目。 |
take |
- |
- |
O (N) |
- |
- |
傳回最多達指定計數的序列項目。 |
takeWhile |
- |
- |
O (1) |
- |
- |
傳回,此物件,如果重複執行,不會產生這個基礎序列之項目的序列,則所指定述詞傳回可傳回沒有其他項目的 true 時。 |
toArray |
- |
O (N) |
O (N) |
O (N) |
O (N) |
從指定的集合建立陣列。 |
toList |
O (N) |
- |
O (N) |
O (N) |
O (N) |
從指定的集合建立清單。 |
toSeq |
O (1) |
O (1) |
- |
O (1) |
O (1) |
若要從指定之集合的序列。 |
truncate |
- |
- |
O (1) |
- |
- |
傳回,此物件,當列舉,不超過N個項目傳回的序列。 |
tryFind |
O (N) |
O (N) |
O (N) |
O (log) N |
- |
搜尋滿足指定的述詞的項目。 |
tryFindIndex |
O (N) |
O (N) |
O (N) |
- |
- |
搜尋滿足指定的述詞並傳回相符項目的索引的第一個項目,而 None ,如果沒有此類項目存在則為。 |
tryFindKey |
- |
- |
- |
O (log) N |
- |
傳回集合中第一個符合指定術詞之對應的金鑰,如果沒有此項目則傳回 None。 |
tryPick |
O (N) |
O (N) |
O (N) |
O (log) N |
- |
將指定的函式套用至後續項目,以傳回函式傳回某些值的 Some 的第一個結果。 如果沒有此類項目存在,作業會傳回 None。 |
unfold |
- |
- |
O (N) |
- |
- |
傳回包含項目的計算產生的序列。 |
union |
- |
- |
- |
- |
M * O (log) N |
計算兩個集合的聯集。 |
unionMany |
- |
- |
- |
- |
O (N1 * N2…) |
計算集合序列的聯集。 |
unzip |
O (N) |
O (N) |
O (N) |
- |
- |
將一個配對清單分割成兩個清單。 |
unzip3 |
O (N) |
O (N) |
O (N) |
- |
- |
將三個一組的清單分割成三個清單。 |
windowed |
- |
- |
O (N) |
- |
- |
傳回產生可調整視窗包含項目從輸入序列中取出的序列。 每個傳回的視窗都是最新的陣列。 |
zip |
O (N) |
O (N) |
O (N) |
- |
- |
會將兩個集合合併成組的清單。 兩個清單的長度必須相等。 |
zip3 |
O (N) |
O (N) |
O (N) |
- |
- |
合併三個集合為三個一組的清單。 清單的長度必須相等。 |