Sdílet prostřednictvím


Typy kolekcí F#

Když si projdete toto téma, můžete určit, který typ kolekce jazyka F# nejlépe vyhovuje konkrétním potřebám. Tyto typy kolekcí se liší od typů kolekcí v .NET, například v System.Collections.Generic oboru názvů, v tom, že typy kolekcí jazyka F# jsou navrženy z hlediska funkčního programování místo objektově orientované perspektivy. Konkrétnější je, že pouze kolekce polí má proměnlivé prvky. 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 tabulky hash, propojené seznamy a pole, mají různé charakteristiky výkonu a jinou sadu dostupných operací.

Tabulka typů kolekcí

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

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

List Module
Pole Pevná, nulová proměnlivá kolekce 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 z jednoho typu. Sekvence jsou užitečné zejména v případě, že máte velkou seřazenou kolekci dat, ale neočekáváte, že budou všechny prvky používat. Jednotlivé prvky sekvence se počítají jenom podle potřeby, takže sekvence může fungovat lépe než seznam, pokud se nepoužívají všechny prvky. Sekvence jsou reprezentovány typem seq<'T> , což je alias pro IEnumerable<T>. Proto lze jakýkoli typ rozhraní .NET Framework, který implementuje System.Collections.Generic.IEnumerable<'T> , použít jako posloupnost. Sekvence

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

Tabulka funkcí

Tato část porovnává funkce, které jsou k dispozici u typů kolekcí jazyka F#. Je zadá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 jsou sekvence lazily vyhodnoceny, může být funkce, například Seq.distinct O(1), protože se vrátí okamžitě, i když stále ovlivňuje výkon sekvence při výčtu.

Function Pole List Sequence Mapovat 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ěrná 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é pro každý prvek.
blit O(N) - - - - Zkopíruje oddíl pole.
cache - - O(N) - - Vypočítá a ukládá 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 obsahující výsledky pro každý prvek, kde funkce vrátí 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í sloučený seznam.
compareWith - - O(N) - - Porovná dvě sekvence pomocí dané porovnávací funkce, prvku podle elementu.
concat O(N) O(N) O(N) - - Kombinuje daný výčet výčtů jako jeden zřetězený výčet.
obsahuje - - - - O(log(N)) Vrátí hodnotu true, pokud sada obsahuje zadaný prvek.
Containskey - - - O(log(N)) - Testuje, zda je prvek v doméně mapy.
count - - - - O(N) Vrátí počet prvků v objektu set.
countBy - - O(N) - - Použije funkci generování klíčů na každý prvek sekvence a vrátí sekvenci, která vrací 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 původně 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é 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 vyskytuje vícekrát v sekvenci, 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 na klíčích, které daná funkce generující klíč vrátí. Pokud se prvek vyskytuje vícekrát v sekvenci, 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)) Testuje, zda některý prvek sekvence splňuje daný predikát.
existuje2 O(min(N;M)) - O(min(N;M)) Testuje, zda jakákoli dvojice odpovídajících prvků vstupních sekvencí 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 které daný predikát vrátí true.
find O(N) O(N) O(N) O(log(N)) - Vrátí první prvek, pro který daná funkce vrátí true. Vrátí System.Collections.Generic.KeyNotFoundException , pokud neexistuje žádný takový prvek.
Findindex O(N) O(N) O(N) - - Vrátí index prvního prvku v matici, který splňuje daný predikát. System.Collections.Generic.KeyNotFoundException Vyvolá, pokud žádný prvek nesplňuje predikát.
findKey - - - 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 pro každý prvek kolekce, ve vlákně argument akumulátoru prostřednictvím výpočtu. Pokud je vstupní funkce f a prvky jsou i0... IN, tato funkce vypočítá f (... (f s i0)...) In.
přeložení 2 O(N) O(N) - - - Použije funkci na odpovídající prvky dvou kolekcí, která pomocí výpočtu nutí argument akumulátoru. Kolekce musí mít stejné velikosti. Pokud je vstupní funkce f a prvky jsou i0... iN a 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 pro každý prvek kolekce, ve vlákně argument akumulátoru prostřednictvím výpočtu. 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á pomocí výpočtu nutí argument akumulátoru. Kolekce musí mít stejné velikosti. Pokud je vstupní funkce f a prvky jsou i0... iN a j0... jN, tato funkce vypočítá f i0 j0 (... (f iN jN s)).
Forall O(N) O(N) O(N) O(N) O(N) Testuje, zda všechny prvky kolekce splňují daný predikát.
forall2 O(N) O(N) O(N) - - Testuje, zda všechny odpovídající prvky kolekce splňují daný predikát párově.
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 s ohledem na dimenzi a funkci generátoru pro výpočet prvků.
initInfinite - - O(1) - - Vygeneruje sekvenci, která při iterated vrací následné prvky voláním dané funkce.
intersect - - - - O(log(N)*log(M)) Vypočítá průnik dvou sad.
intersectMany - - - - O(N1*N2...) Vypočítá průnik posloupnosti sad. Sekvence nesmí být prázdná.
isEmpty O(1) O(1) O(1) O(1) - Vrátí true , pokud je kolekce prázdná.
isProperSubset - - - - O(M*log(N)) Vrátí true , pokud jsou všechny prvky první sady ve druhé sadě a alespoň jeden prvek druhé sady není v první sadě.
isProperSuperset - - - - O(M*log(N)) Vrátí true , pokud jsou všechny prvky druhé sady v první sadě a alespoň jeden prvek první sady není ve druhé sadě.
isSubset - - - - O(M*log(N)) Vrátí true , pokud jsou všechny prvky první sady ve druhé sadě.
isSuperset - - - - O(M*log(N)) Vrátí true , 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 O(N) O(N) O(N) - - Použije danou funkci na každý prvek kolekce. Celé číslo, které je předáno funkci označuje index prvku.
iteri2 O(N) O(N) - - - Použije danou funkci na dvojici prvků, které jsou nakresleny 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 nakresleny 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.
map O(N) O(N) O(1) - - Vytvoří kolekci, jejíž prvky jsou výsledky použití dané funkce na každý prvek pole.
map2 O(N) O(N) O(1) - - Vytvoří kolekci, jejíž prvky jsou výsledky použití dané funkce na odpovídající prvky těchto dvou kolekcí spárovaných. Dvě vstupní pole musí mít stejnou délku.
map3 - O(N) - - - Vytvoří kolekci, jejíž prvky jsou výsledky použití dané funkce na odpovídající prvky tří kolekcí současně.
Mapi O(N) O(N) O(N) - - Vytvoří pole, jehož prvky jsou výsledky použití dané funkce na každý prvek pole. Celočíselné indexy předané funkci označují index transformovaného prvku.
mapi2 O(N) O(N) - - - Vytvoří kolekci, jejíž prvky jsou výsledky použití dané funkce na odpovídající prvky dvou kolekcí spárovaných po druhé, a také předávání indexu prvků. Dvě vstupní pole musí mít stejnou délku.
max O(N) O(N) O(N) - - Vrátí největší prvek v kolekci ve srovnání s maximálním operátorem.
maxBy O(N) O(N) O(N) - - Vrátí největší prvek v kolekci ve srovnání s maximálním využitím výsledku funkce.
maxElement - - - - O(log(N)) Vrátí největší prvek v sadě podle pořadí, které se používá pro množinu.
min O(N) O(N) O(N) - - Vrátí nejmenší prvek v kolekci ve srovnání s minimálním operátorem.
minBy O(N) O(N) O(N) - - Vrátí nejmenší prvek v kolekci ve srovnání s minimálním operátorem ve výsledku funkce.
minElement - - - - O(log(N)) Vrátí nejnižší prvek v sadě podle pořadí použitého pro sadu.
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 daná sekvence.
spárování - - O(N) - - Vrátí sekvenci každého prvku ve vstupní sekvenci a jeho předchůdce 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 vrátí true, a druhá kolekce obsahuje prvky, pro které daný predikát vrátí false.
permute O(N) O(N) - - - Vrátí matici se všemi prvky permutovanými 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, kde funkce vrátí některé. Pokud funkce nikdy nevrátí některé, System.Collections.Generic.KeyNotFoundException je vyvolána.
readonly - - O(N) - - Vytvoří sekvenční objekt, který deleguje na daný objekt sekvence. Tato operace zajišťuje, že přetypování typu nemůže znovu zjistit a ztlumit původní sekvenci. Pokud je například vrácená sekvence vrácena, vrátí prvky pole, ale vrácený objekt sekvence nelze přetypovat na matici.
Snížit O(N) O(N) O(N) - - Použije funkci pro každý prvek kolekce, ve vlákně argument akumulátoru prostřednictvím výpočtu. Tato funkce začíná použitím funkce na první dva prvky, předá tento výsledek funkci spolu s třetím prvkem atd. Funkce vrátí konečný výsledek.
reduceBack O(N) O(N) - - - Použije funkci pro každý prvek kolekce, ve vlákně argument akumulátoru prostřednictvím výpočtu. 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. Není vyvolána žádná výjimka, pokud prvek není k dispozici.
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 pro každý prvek kolekce, ve vlákně argument akumulátoru prostřednictvím výpočtu. Tato operace použije funkci na druhý argument a první prvek seznamu. Operace pak tento výsledek předá funkci spolu s druhým prvkem atd. Nakonec operace vrátí seznam průběžných výsledků a konečný výsledek.
scanBack O(N) O(N) - - - Podobá se operaci foldBack, ale vrací přechodné i konečné výsledky.
Singleton - - O(1) - O(1) Vrátí sekvenci, která vrací pouze jednu položku.
set O(1) - - - - Nastaví prvek pole na zadanou hodnotu.
skip - - O(N) - - Vrátí sekvenci, která přeskočí N prvků podkladové sekvence a pak vrátí zbývající prvky sekvence.
Skipwhile - - O(N) - - Vrátí sekvenci, která při iterated přeskočí prvky podkladové sekvence, zatímco daný predikát vrátí true a potom vrátí zbývající prvky sekvence.
sort Průměr O(N*log(N))

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í.
sortBy Průměr O(N*log(N))

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

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

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

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

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.
předmět O(N) - - - - Vytvoří pole, které obsahuje danou poduspořádku určenou 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ů vygenerovaných 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 iterated vrátí prvky podkladové sekvence, zatímco daný predikát vrátí true a pak nevrátí žádné další prvky.
Toarray - O(N) O(N) O(N) O(N) Vytvoří z dané kolekce pole.
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.
truncate - - 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 vrátí index odpovídajícího prvku, nebo None pokud takový prvek neexistuje.
tryFindKey - - - O(log(N)) - Vrátí klíč prvního mapování v kolekci, která splňuje daný predikát, nebo vrátí None , pokud neexistuje žádný takový prvek.
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, kde funkce vrátí Some nějakou hodnotu. Pokud takový prvek neexistuje, vrátí operace None.
Rozvinout - - O(N) - - Vrátí sekvenci obsahující prvky, které daný výpočet generuje.
sjednocení - - - - O(M*log(N)) Vypočítá sjednocení těchto dvou sad.
unionMany - - - - O(N1*N2...) Vypočítá sjednocení posloupnosti sad.
Rozbalte O(N) O(N) O(N) - - Rozdělí seznam dvojic do dvou seznamů.
rozbalit 3 O(N) O(N) O(N) - - Rozdělí seznam trojitých na tři seznamy.
Okna - - O(N) - - Vrátí sekvenci, která vrací posuvná okna obsahující prvky nakreslené 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 stejné délky.
zip3 O(N) O(N) O(N) - - Zkombinuje tři kolekce do seznamu trojitých. Seznamy musí mít stejné délky.

Viz také