Typy kolekcí F#

V tomto tématu zjistíte, který typ kolekce F# nejlépe vyhovuje konkrétním potřebám. Tyto typy kolekcí se liší od typů kolekcí v rozhraní .NET, jako jsou například typy v oboru názvů, v tom, že typy kolekcí jazyka F# jsou navrženy z hlediska funkčního programování, nikoli z objektově orientované System.Collections.Generic perspektivy. Přesněji řečeno, pouze kolekce polí má mutable elementy. Proto při úpravě kolekce vytvoříte instanci upravené kolekce namísto změny původní kolekce.

Typy kolekcí se také liší v typu datové struktury, ve které jsou objekty uloženy. Datové struktury, jako jsou zatřiďovací tabulky, propojené seznamy a pole, mají různé charakteristiky výkonu a různé sady dostupných operací.

Tabulka typů kolekcí

V následující tabulce jsou uvedeny typy kolekcí F#.

Typ Popis Související odkazy
Seznam Seřazená neměnná řada prvků stejného typu. Implementovali jste ho jako propojený seznam. Seznamy

List Module
Pole S pevnou velikostí, od nuly, s možností shromažďování po sobě jdoucích datových prvků, které jsou všechny stejného typu. Pole

Modul pole

Modul Array2D

Modul Array3D
Seq Logická řada prvků, které jsou všechny jednoho typu. Sekvence jsou užitečné zejména v případě, že máte velkou seřazenou kolekci dat, ale nemusíte nutně očekávat použití všech prvků. Jednotlivé prvky sekvence se počítají pouze podle potřeby, takže sekvence může provádět lépe než seznam, pokud nejsou použity všechny prvky. Sekvence jsou reprezentovány seq<'T> typem , což je alias pro IEnumerable<T> . Proto lze .NET Framework, který implementuje, System.Collections.Generic.IEnumerable<'T> použít jako sekvenci. Sekvence

Modul Seq
Mapa Neměnný slovník prvků. K elementům se přistupuje pomocí klíče. Mapový modul
Set Neměnná sada založená na binárních stromech, kde porovnání je strukturální srovnávací funkce jazyka F#, která potenciálně používá implementace rozhraní pro System.IComparable hodnoty klíčů. Nastavení modulu

Tabulka funkcí

Tato část porovnává funkce, které jsou k dispozici pro typy kolekcí F#. Je dána výpočetní složitost funkce, kde N je velikost první kolekce a M je velikost druhé kolekce, pokud existuje. Pomlčka (-) označuje, že tato funkce není v kolekci dostupná. Vzhledem k tomu, že sekvence jsou laxně vyhodnoceny, může být funkce, například O(1), protože vrací okamžitě, i když stále ovlivňuje výkon sekvence při Seq.distinct výčtu.

Funkce Pole Seznam Sequence Mapa Nastavit Popis
Připojit O(N) O(N) O(N) - - Vrátí novou kolekci, která obsahuje prvky první kolekce následované prvky druhé kolekce.
add - - - O(log(N)) O(log(N)) Vrátí novou kolekci s přidaným prvkem.
Průměr O(N) O(N) O(N) - - Vrátí průměr prvků v kolekci.
averageBy O(N) O(N) O(N) - - Vrátí průměr výsledků poskytnuté funkce použité u každého prvku.
blit (blit) O(N) - - - - Zkopíruje oddíl pole.
cache - - O(N) - - Vypočítá a uloží prvky sekvence.
přetypování - - O(N) - - Převede prvky na zadaný typ.
Zvolte O(N) O(N) O(N) - - Použije danou funkci f na každý prvek x seznamu. Vrátí seznam, který obsahuje výsledky pro každý prvek, kde funkce vrací Some(f(x)) .
Shromažďovat O(N) O(N) O(N) - - Použije danou funkci na každý prvek kolekce, zřetězí všechny výsledky a vrátí kombinovaný seznam.
compareWith - - O(N) - - Porovná dvě sekvence pomocí dané funkce porovnání, elementu po prvku.
concat O(N) O(N) O(N) - - Zkombinuje daný výčet výčtů jako jeden zřetěovaný výčet.
obsahuje - - - - O(log(N)) Vrátí hodnotu true, pokud sada obsahuje zadaný prvek.
Containskey - - - O(log(N)) - Ověřuje, zda je prvek v doméně objektu map.
count - - - - O(N) Vrátí počet prvků v objektu set.
countBy (počet podle) - - O(N) - - Použije funkci generování klíče na každý prvek sekvence a vrátí sekvenci, která vrátí jedinečné klíče a jejich počet výskytů v původní sekvenci.
kopírování O(N) - O(N) - - Zkopíruje kolekci.
vytvoření O(N) - - - - Vytvoří pole celých prvků, které jsou na začátku danou hodnotou.
Zpoždění - - O(1) - - Vrátí sekvenci vytvořenou z dané zpožděné specifikace sekvence.
rozdíl - - - - O(M * log(N)) Vrátí novou sadu s prvky druhé sady odebranými z první sady.
distinct O(1)* Vrátí sekvenci, která neobsahuje žádné duplicitní položky podle obecného porovnání hodnot hash a rovnosti u položek. Pokud se prvek v sekvenci vyskytuje několikrát, pozdější výskyty se zahodí.
distinctBy O(1)* Vrátí sekvenci, která neobsahuje žádné duplicitní položky podle obecného porovnání hodnot hash a rovnosti u klíčů, které vrací funkce generující klíč. Pokud se prvek v sekvenci vyskytuje několikrát, pozdější výskyty se zahodí.
empty O(1) O(1) O(1) O(1) O(1) Vytvoří prázdnou kolekci.
Existuje O(N) O(N) O(N) O(log(N)) O(log(N)) Ověřuje, zda některý prvek sekvence splňuje daný predikát.
exists2 O(min(N;M)) - O(min(N;M)) Ověřuje, zda některý pár odpovídajících prvků vstupní sekvence splňuje daný predikát.
fill O(N) Nastaví rozsah prvků pole na danou hodnotu.
filter O(N) O(N) O(N) O(N) O(N) Vrátí novou kolekci, která obsahuje pouze prvky kolekce, pro kterou daný predikát vrací true .
find O(N) O(N) O(N) O(log(N)) - Vrátí první prvek, pro který given funkce vrátí true . Vrátí System.Collections.Generic.KeyNotFoundException hodnotu , pokud takový prvek neexistuje.
Findindex O(N) O(N) O(N) - - Vrátí index prvního prvku v poli, který splňuje daný predikát. Vyvolá, pokud žádný prvek predikát System.Collections.Generic.KeyNotFoundException splňuje.
findKey (klíč hledání) - - - O(log(N)) - Vyhodnotí funkci pro každé mapování v kolekci a vrátí klíč pro první mapování, kde funkce vrátí true . Pokud takový prvek neexistuje, tato funkce vyvolá System.Collections.Generic.KeyNotFoundException .
Složit O(N) O(N) O(N) O(N) O(N) Použije funkci na každý prvek kolekce a zřetědí argument zásobníku výpočtem. Pokud je vstupní funkce f a prvky jsou i0... iN, tato funkce vypočítá f (... (f s i0)...) In.
fold2 O(N) O(N) - - - Použije funkci na odpovídající prvky dvou kolekcí, které propojují argument zásobníku výpočtem. Kolekce musí mít identické velikosti. Pokud je vstupní funkce f a prvky jsou i0... iN and j0... jN, tato funkce vypočítá f (... (f s i0 j0)...) iN jN.
foldBack O(N) O(N) - O(N) O(N) Použije funkci na každý prvek kolekce a zřetědí argument zásobníku výpočtem. Pokud je vstupní funkce f a prvky jsou i0... iN, tato funkce vypočítá f i0 (... (f iN s)).
foldBack2 O(N) O(N) - - - Použije funkci na odpovídající prvky dvou kolekcí, které propojují argument zásobníku výpočtem. Kolekce musí mít identické velikosti. Pokud je vstupní funkce f a prvky jsou i0... iN and j0... jN, tato funkce vypočítá f i0 j0 (... (f iN jN s)).
Forall O(N) O(N) O(N) O(N) O(N) Ověřuje, zda všechny prvky kolekce splňují daný predikát.
forall2 O(N) O(N) O(N) - - Ověřuje, zda všechny odpovídající prvky kolekce splňují daný pár predikátu.
get / nth O(1) O(N) O(N) - - Vrátí prvek z kolekce vzhledem k jeho indexu.
Hlavy - O(1) O(1) - - Vrátí první prvek kolekce.
init O(N) O(N) O(1) - - Vytvoří kolekci pro danou dimenzi a funkci generátoru pro výpočet prvků.
initInfinite - - O(1) - - Vygeneruje sekvenci, která při iterování vrátí po sobě jdoucí prvky voláním dané funkce.
intersect - - - - Protokol O(log(N) * (M)) Vypočítá průnik dvou sad.
intersectMany - - - - O(N1 * N2...) Vypočítá průnik sekvence sad. Sekvence nesmí být prázdná.
isEmpty O(1) O(1) O(1) O(1) - Vrátí true hodnotu , pokud je kolekce prázdná.
isProperSubset - - - - O(M * log(N)) Vrátí hodnotu , pokud jsou všechny prvky první sady ve druhé sadě a alespoň jeden prvek druhé sady není v true první sadě.
isProperSuperset - - - - O(M * log(N)) Vrátí hodnotu , pokud jsou všechny prvky druhé sady v první sadě a alespoň jeden prvek první sady není ve true druhé sadě.
isSubset - - - - O(M * log(N)) Vrátí true hodnotu , pokud jsou všechny prvky první sady v druhé sadě.
isSuperset - - - - O(M * log(N)) Vrátí true hodnotu , pokud jsou všechny prvky druhé sady v první sadě.
Iter O(N) O(N) O(N) O(N) O(N) Použije danou funkci na každý prvek kolekce.
iteri (iteri) O(N) O(N) O(N) - - Použije danou funkci na každý prvek kolekce. Celé číslo předané funkci označuje index elementu.
iteri2 O(N) O(N) - - - Použije danou funkci na dvojici prvků, které jsou vykreslovány z odpovídajících indexů ve dvou polích. Celé číslo předané funkci označuje index prvků. Obě pole musí mít stejnou délku.
iter2 O(N) O(N) O(N) - - Použije danou funkci na dvojici prvků, které jsou vykreslovány z odpovídajících indexů ve dvou polích. Obě pole musí mít stejnou délku.
poslední O(1) O(N) O(N) - - Vrátí poslední položku v příslušné kolekci.
length O(1) O(N) O(N) - - Vrátí počet prvků v kolekci.
mapa O(N) O(N) O(1) - - Sestaví kolekci, jejíž prvky jsou výsledkem použití dané funkce na každý prvek pole.
mapa 2 O(N) O(N) O(1) - - Vytvoří kolekci, jejíž prvky jsou výsledkem použití dané funkce na odpovídající prvky dvou kolekcí párem. Dvě vstupní pole musí mít stejnou délku.
mapa 3 - O(N) - - - Sestaví kolekci, jejíž prvky jsou výsledkem použití dané funkce na odpovídající prvky tří kolekcí současně.
Mapi O(N) O(N) O(N) - - Sestaví pole, jehož prvky jsou výsledkem použití dané funkce na každý prvek pole. Celočíselný index předaný funkci označuje index transformovaného prvku.
mapi2 O(N) O(N) - - - Sestaví kolekci, jejíž prvky jsou výsledkem použití dané funkce na odpovídající prvky dvou kolekcí, a zároveň předá index prvků. Dvě vstupní pole musí mít stejnou délku.
max O(N) O(N) O(N) - - Vrátí největší prvek v kolekci porovnaný pomocí operátoru max.
maxBy (maxBy) O(N) O(N) O(N) - - Vrátí největší prvek v kolekci porovnaný pomocí maxima na výsledku funkce.
maxElement - - - - O(log(N)) Vrátí největší prvek v objektu set podle pořadí, které se používá pro objekt set.
min O(N) O(N) O(N) - - Vrátí nejmenší prvek v kolekci porovnaný pomocí operátoru min.
minBy O(N) O(N) O(N) - - Vrátí nejmenší prvek v kolekci porovnaný pomocí operátoru min ve výsledku funkce.
minElement - - - - O(log(N)) Vrátí nejnižší prvek v objektu set podle pořadí, které se používá pro objekt set.
ofArray - O(N) O(1) O(N) O(N) Vytvoří kolekci, která obsahuje stejné prvky jako dané pole.
ofList O(N) - O(1) O(N) O(N) Vytvoří kolekci, která obsahuje stejné prvky jako daný seznam.
ofSeq O(N) O(N) - O(N) O(N) Vytvoří kolekci, která obsahuje stejné prvky jako pro danou sekvenci.
pairwise (párování) - - O(N) - - Vrátí sekvenci každého prvku ve vstupní sekvenci a jeho předchůdci s výjimkou prvního prvku, který je vrácen pouze jako předchůdce druhého prvku.
partition O(N) O(N) - O(N) O(N) Rozdělí kolekci do dvou kolekcí. První kolekce obsahuje prvky, pro které daný predikát vrací , a druhá kolekce obsahuje prvky, pro které true daný predikát vrací false .
permute O(N) O(N) - - - Vrátí pole se všemi prvky permutované podle zadané permutace.
Vybrat O(N) O(N) O(N) O(log(N)) - Použije danou funkci na po sobě jdoucí prvky a vrátí první výsledek, ve kterém funkce vrátí hodnotu Some. Pokud funkce nikdy nevrátí hodnotu Some, System.Collections.Generic.KeyNotFoundException je vyvolána funkce .
readonly - - O(N) - - Vytvoří objekt sekvence, který deleguje na daný objekt sekvence. Tato operace zajistí, že přetypování nemůže znovu zjistit a zmutovat původní sekvenci. Pokud je například dané pole, vrácená sekvence vrátí prvky pole, ale vrácený objekt sekvence nelze přetypovat na pole.
Snížit O(N) O(N) O(N) - - Použije funkci na každý prvek kolekce a zřetědí argument zásobníku výpočtem. Tato funkce začíná použitím funkce na první dva prvky, předá tento výsledek do funkce spolu s třetím prvkem atd. Funkce vrátí konečný výsledek.
reduceBack O(N) O(N) - - - Použije funkci na každý prvek kolekce a zřetědí argument zásobníku výpočtem. Pokud je vstupní funkce f a prvky jsou i0... iN, tato funkce vypočítá f i0 (... (f iN-1 iN)).
remove - - - O(log(N)) O(log(N)) Odebere prvek z domény mapy. Pokud prvek není k dispozici, není vyvolána žádná výjimka.
Replikovat - O(N) - - - Vytvoří seznam zadané délky s každým prvkem nastaveným na danou hodnotu.
Rev O(N) O(N) - - - Vrátí nový seznam s prvky v obráceném pořadí.
Skenování O(N) O(N) O(N) - - Použije funkci na každý prvek kolekce a zřetědí argument zásobníku výpočtem. Tato operace použije funkci na druhý argument a první prvek seznamu. Operace pak tento výsledek předá do funkce spolu s druhým prvkem atd. Nakonec operace vrátí seznam mezilehlých výsledků a konečný výsledek.
scanBack O(N) O(N) - - - Podobá se operaci foldBack, ale vrací středně pokročilé i konečné výsledky.
Singleton - - O(1) - O(1) Vrátí sekvenci, která vrátí pouze jednu položku.
set O(1) - - - - Nastaví prvek pole na zadanou hodnotu.
Přeskočit - - O(N) - - Vrátí sekvenci, která přeskočí N prvků základní sekvence a pak vrátí zbývající prvky sekvence.
Skipwhile - - O(N) - - Vrátí sekvenci, která při iteraci přeskočí prvky podkladové sekvence, zatímco se daný predikát vrátí, a pak vrátí zbývající prvky true sekvence.
sort O(N * log(N)) average

Nejhorší případ O(N^2)
O(N * log(N)) O(N * log(N)) - - Seřadí kolekci podle hodnoty elementu. Prvky se porovnávají pomocí porovnání.
seřadit podle O(N * log(N)) average

Nejhorší případ O(N^2)
O(N * log(N)) O(N * log(N)) - - Seřadí daný seznam pomocí klíčů, které poskytuje projekce. Klíče se porovnávají pomocí porovnání.
sortInPlace O(N * log(N)) average

Nejhorší případ O(N^2)
- - - - Seřadí prvky pole tak, že ho na místě zmutuje a použije danou funkci porovnání. Prvky se porovnávají pomocí porovnání.
sortInPlaceBy O(N * log(N)) average

Nejhorší případ O(N^2)
- - - - Seřadí prvky pole tak, že ho na místě zmutuje a použije danou projekci klíčů. Prvky se porovnávají pomocí porovnání.
sortInPlaceWith O(N * log(N)) average

Nejhorší případ O(N^2)
- - - - Seřadí prvky pole tak, že ho na místě zmutují a jako pořadí použije danou funkci porovnání.
sortWith O(N * log(N)) average

Nejhorší případ O(N^2)
O(N * log(N)) - - - Seřadí prvky kolekce pomocí dané funkce porovnání jako pořadí a vrátí novou kolekci.
Dílčí O(N) - - - - Vytvoří pole, které obsahuje daný podrozsah určený počátečním indexem a délkou.
Součet O(N) O(N) O(N) - - Vrátí součet prvků v kolekci.
sumBy O(N) O(N) O(N) - - Vrátí součet výsledků, které jsou generovány použitím funkce na každý prvek kolekce.
Ocas - O(1) - - - Vrátí seznam bez prvního prvku.
take - - O(N) - - Vrátí prvky sekvence až do zadaného počtu.
Takewhile - - O(1) - - Vrátí sekvenci, která při iteraci vrací prvky základní sekvence, zatímco daný predikát vrací a pak nevrátí true žádné další prvky.
Toarray - O(N) O(N) O(N) O(N) Vytvoří pole z dané kolekce.
Tolist O(N) - O(N) O(N) O(N) Vytvoří seznam z dané kolekce.
toSeq O(1) O(1) - O(1) O(1) Vytvoří sekvenci z dané kolekce.
Zkrátit - - O(1) - - Vrátí sekvenci, která při výčtu nevrátí více než N prvků.
tryFind O(N) O(N) O(N) O(log(N)) - Vyhledá prvek, který splňuje daný predikát.
tryFindIndex O(N) O(N) O(N) - - Vyhledá první prvek, který splňuje daný predikát a vrací index odpovídajícího prvku, nebo pokud takový None prvek neexistuje.
tryFindKey - - - O(log(N)) - Vrátí klíč prvního mapování v kolekci, která splňuje daný predikát, nebo vrátí hodnotu , pokud None takový prvek neexistuje.
tryPick O(N) O(N) O(N) O(log(N)) - Použije danou funkci na po sobě jdoucí prvky a vrátí první výsledek, ve kterém funkce vrátí Some nějakou hodnotu. Pokud takový prvek neexistuje, operace vrátí None .
Rozvinout - - O(N) - - Vrátí sekvenci, která obsahuje prvky, které daný výpočet generuje.
sjednocení - - - - O(M * log(N)) Vypočítá sjednocené spojení těchto dvou sad.
unionMany (sjednocené sjednoce - - - - O(N1 * N2...) Vypočítá sjednocenou sekvenci sad.
Rozbalte O(N) O(N) O(N) - - Rozdělí seznam párů do dvou seznamů.
unzip3 O(N) O(N) O(N) - - Rozdělí seznam trojitých hodnot do tří seznamů.
Okna - - O(N) - - Vrátí sekvenci, která dává posuvná okna obsahující prvky, které jsou vykreslovány ze vstupní sekvence. Každé okno se vrátí jako nové pole.
Zip O(N) O(N) O(N) - - Zkombinuje dvě kolekce do seznamu párů. Oba seznamy musí mít stejnou délku.
zip3 O(N) O(N) O(N) - - Zkombinuje tři kolekce do seznamu trojitých hodnot. Seznamy musí mít stejnou délku.

Viz také