F#-verzamelingstypen

Door dit onderwerp te bekijken, kunt u bepalen welk F#-verzamelingstype het beste past bij een bepaalde behoefte. Deze verzamelingstypen verschillen van de verzamelingstypen in .NET, zoals die in de System.Collections.Generic naamruimte, omdat de F#-verzamelingstypen zijn ontworpen vanuit een functioneel programmeerperspectief in plaats van een objectgeoriënteerd perspectief. Meer specifiek heeft alleen de matrixverzameling veranderlijke elementen. Wanneer u een verzameling wijzigt, maakt u daarom een exemplaar van de gewijzigde verzameling in plaats van de oorspronkelijke verzameling te wijzigen.

Verzamelingstypen verschillen ook in het type gegevensstructuur waarin objecten worden opgeslagen. Gegevensstructuren zoals hashtabellen, gekoppelde lijsten en matrices hebben verschillende prestatiekenmerken en een andere set beschikbare bewerkingen.

Tabel met verzamelingstypen

In de volgende tabel ziet u F#-verzamelingstypen.

Type Description Verwante koppelingen
Lijst Een geordende, onveranderbare reeks elementen van hetzelfde type. Geïmplementeerd als een gekoppelde lijst. Lijsten

Lijstmodule
Array Een onveranderbare verzameling van opeenvolgende gegevenselementen die allemaal van hetzelfde type zijn, op basis van nul. Arrays

Matrixmodule

Matrix2D-module

Matrix3D-module
Seq Een logische reeks elementen die allemaal van één type zijn. Reeksen zijn met name handig wanneer u een grote, geordende verzameling gegevens hebt, maar niet noodzakelijkerwijs alle elementen wilt gebruiken. Afzonderlijke reekselementen worden alleen als vereist berekend, zodat een reeks beter kan presteren dan een lijst als niet alle elementen worden gebruikt. Reeksen worden vertegenwoordigd door het seq<'T> type, een alias voor IEnumerable<T>. Daarom kan elk .NET Framework-type dat wordt geïmplementeerd System.Collections.Generic.IEnumerable<'T> , worden gebruikt als een reeks. Reeksen

Seq-module
Map Een onveranderbare woordenlijst met elementen. Elementen worden geopend op basis van de sleutel. Kaartmodule
Instellen Een onveranderbare set die is gebaseerd op binaire structuren, waarbij de vergelijking de structurele F#-vergelijkingsfunctie is, die mogelijk gebruikmaakt van implementaties van de System.IComparable interface op sleutelwaarden. Module instellen

Tabel met functies

In deze sectie worden de functies vergeleken die beschikbaar zijn op F#-verzamelingstypen. De rekenkundige complexiteit van de functie wordt gegeven, waarbij N de grootte van de eerste verzameling is en M de grootte van de tweede verzameling, indien van toepassing. Een streepje (-) geeft aan dat deze functie niet beschikbaar is in de verzameling. Omdat reeksen lazily worden geëvalueerd, kan een functie zoals Seq.distinct O(1) zijn omdat deze onmiddellijk wordt geretourneerd, hoewel dit nog steeds van invloed is op de prestaties van de reeks wanneer deze wordt opgesomd.

Functie Matrix List Sequence Overzicht Instellen Beschrijving
append O(N) O(N) O(N) - - Retourneert een nieuwe verzameling die de elementen van de eerste verzameling bevat, gevolgd door elementen van de tweede verzameling.
add - - - O(log(N)) O(log(N)) Retourneert een nieuwe verzameling met het toegevoegde element.
Gemiddelde O(N) O(N) O(N) - - Retourneert het gemiddelde van de elementen in de verzameling.
averageBy O(N) O(N) O(N) - - Retourneert het gemiddelde van de resultaten van de opgegeven functie die op elk element is toegepast.
blit O(N) - - - - Hiermee kopieert u een sectie van een matrix.
cache - - O(N) - - Berekent en slaat elementen van een reeks op.
cast - - O(N) - - Converteert de elementen naar het opgegeven type.
Kies O(N) O(N) O(N) - - Hiermee past u de opgegeven functie f toe op elk element x van de lijst. Retourneert de lijst die de resultaten bevat voor elk element waarin de functie wordt geretourneerd Some(f(x)).
Verzamelen O(N) O(N) O(N) - - De opgegeven functie wordt toegepast op elk element van de verzameling, voegt alle resultaten samen en retourneert de gecombineerde lijst.
compareWith - - O(N) - - Vergelijkt twee reeksen met behulp van de opgegeven vergelijkingsfunctie, element per element.
concat O(N) O(N) O(N) - - Combineert de opgegeven opsomming-van-opsommingen als één samengevoegde opsomming.
bevat - - - - O(log(N)) Retourneert waar als de set het opgegeven element bevat.
containsKey - - - O(log(N)) - Test of een element zich in het domein van een kaart bevindt.
aantal - - - - O(N) Retourneert het aantal elementen in de set.
countBy - - O(N) - - Hiermee wordt een functie voor het genereren van sleutels toegepast op elk element van een reeks en wordt een reeks geretourneerd die unieke sleutels en het aantal exemplaren in de oorspronkelijke volgorde oplevert.
kopiëren O(N) - O(N) - - Kopieert de verzameling.
maken O(N) - - - - Hiermee maakt u een matrix van hele elementen die in eerste instantie de opgegeven waarde zijn.
vertraging - - O(1) - - Retourneert een reeks die is gebouwd op basis van de opgegeven vertraagde specificatie van een reeks.
Verschil - - - - O(M*log(N)) Retourneert een nieuwe set met de elementen van de tweede set die uit de eerste set is verwijderd.
distinct O(1)* Retourneert een reeks die geen dubbele vermeldingen bevat volgens algemene hash- en gelijkheidsvergelijkingen voor de vermeldingen. Als een element meerdere keren in de reeks voorkomt, worden latere exemplaren verwijderd.
distinctBy O(1)* Retourneert een reeks die geen dubbele vermeldingen bevat volgens de algemene hash- en gelijkheidsvergelijkingen op de sleutels die door de opgegeven sleutel genererende functie worden geretourneerd. Als een element meerdere keren in de reeks voorkomt, worden latere exemplaren verwijderd.
empty O(1) O(1) O(1) O(1) O(1) Hiermee maakt u een lege verzameling.
bestaat O(N) O(N) O(N) O(log(N)) O(log(N)) Test of een element van de reeks voldoet aan het opgegeven predicaat.
exists2 O(min(N;M)) - O(min(N;M)) Hiermee wordt getest of een paar overeenkomstige elementen van de invoerreeksen voldoet aan het opgegeven predicaat.
Vullen O(N) Hiermee stelt u een bereik van elementen van de matrix in op de opgegeven waarde.
filter O(N) O(N) O(N) O(N) O(N) Retourneert een nieuwe verzameling die alleen de elementen van de verzameling bevat waarvoor het opgegeven predicaat terugkeert true.
find O(N) O(N) O(N) O(log(N)) - Retourneert het eerste element waarvoor de opgegeven functie retourneert true. Retourneert System.Collections.Generic.KeyNotFoundException als er geen dergelijk element bestaat.
findIndex O(N) O(N) O(N) - - Retourneert de index van het eerste element in de matrix die voldoet aan het opgegeven predicaat. Werpt op System.Collections.Generic.KeyNotFoundException als er geen element aan het predicaat voldoet.
findKey - - - O(log(N)) - Evalueert de functie op elke toewijzing in de verzameling en retourneert de sleutel voor de eerste toewijzing waar de functie wordt geretourneerd true. Als er geen dergelijk element bestaat, wordt deze functie geactiveerd System.Collections.Generic.KeyNotFoundException.
Vouw O(N) O(N) O(N) O(N) O(N) Hiermee past u een functie toe op elk element van de verzameling, waarbij een accumulatorargument wordt verbonden via de berekening. Als de invoerfunctie f is en de elementen i0 zijn... iN, deze functie berekent f (... (f s i0)...) Inch.
fold2 O(N) O(N) - - - Hiermee past u een functie toe op de bijbehorende elementen van twee verzamelingen, waarbij een accumulatorargument wordt verbonden via de berekening. De verzamelingen moeten identieke grootten hebben. Als de invoerfunctie f is en de elementen i0 zijn... iN en j0... jN, deze functie berekent f (... (f s i0 j0)...) iN jN.
foldBack O(N) O(N) - O(N) O(N) Hiermee past u een functie toe op elk element van de verzameling, waarbij een accumulatorargument wordt verbonden via de berekening. Als de invoerfunctie f is en de elementen i0 zijn... iN, deze functie berekent f i0 (... (f iN s)).
foldBack2 O(N) O(N) - - - Hiermee past u een functie toe op de bijbehorende elementen van twee verzamelingen, waarbij een accumulatorargument wordt verbonden via de berekening. De verzamelingen moeten identieke grootten hebben. Als de invoerfunctie f is en de elementen i0 zijn... iN en j0... jN, deze functie berekent f i0 j0 (... (f iN jN s)).
forall O(N) O(N) O(N) O(N) O(N) Test of alle elementen van de verzameling voldoen aan het opgegeven predicaat.
forall2 O(N) O(N) O(N) - - Hiermee wordt getest of alle bijbehorende elementen van de verzameling aan het opgegeven predicaat met elkaar voldoen.
get / nth O(1) O(N) O(N) - - Retourneert een element uit de verzameling op basis van de index.
Hoofd - O(1) O(1) - - Retourneert het eerste element van de verzameling.
Init O(N) O(N) O(1) - - Hiermee maakt u een verzameling op basis van de dimensie en een generatorfunctie om de elementen te berekenen.
initInfinite - - O(1) - - Genereert een reeks die, wanneer deze wordt ge curseerd, opeenvolgende elementen retourneert door de opgegeven functie aan te roepen.
intersect - - - - O(log(N)*log(M)) Berekent het snijpunt van twee sets.
intersectMany - - - - O(N1*N2...) Berekent het snijpunt van een reeks sets. De reeks mag niet leeg zijn.
isEmpty O(1) O(1) O(1) O(1) - Retourneert true als de verzameling leeg is.
isProperSubset - - - - O(M*log(N)) Retourneert true als alle elementen van de eerste set zich in de tweede set bevinden en ten minste één element van de tweede set zich niet in de eerste set bevindt.
isProperSuperset - - - - O(M*log(N)) Retourneert true als alle elementen van de tweede set zich in de eerste set bevinden en ten minste één element van de eerste set zich niet in de tweede set bevindt.
isSubset - - - - O(M*log(N)) Retourneert true als alle elementen van de eerste set zich in de tweede set bevinden.
isSuperset - - - - O(M*log(N)) Retourneert true als alle elementen van de tweede set zich in de eerste set bevinden.
Iter O(N) O(N) O(N) O(N) O(N) De opgegeven functie wordt toegepast op elk element van de verzameling.
iteri O(N) O(N) O(N) - - De opgegeven functie wordt toegepast op elk element van de verzameling. Het gehele getal dat aan de functie wordt doorgegeven, geeft de index van het element aan.
iteri2 O(N) O(N) - - - Hiermee past u de opgegeven functie toe op een paar elementen die afkomstig zijn van overeenkomende indexen in twee matrices. Het gehele getal dat aan de functie wordt doorgegeven, geeft de index van de elementen aan. De twee matrices moeten dezelfde lengte hebben.
iter2 O(N) O(N) O(N) - - Hiermee past u de opgegeven functie toe op een paar elementen die afkomstig zijn van overeenkomende indexen in twee matrices. De twee matrices moeten dezelfde lengte hebben.
Laatste O(1) O(N) O(N) - - Retourneert het laatste item in de toepasselijke verzameling.
length O(1) O(N) O(N) - - Retourneert het aantal elementen in de verzameling.
map O(N) O(N) O(1) - - Hiermee wordt een verzameling gemaakt waarvan de elementen de resultaten zijn van het toepassen van de opgegeven functie op elk element van de matrix.
kaart2 O(N) O(N) O(1) - - Hiermee wordt een verzameling gemaakt waarvan de elementen de resultaten zijn van het toepassen van de opgegeven functie op de bijbehorende elementen van de twee verzamelingen. De twee invoermatrices moeten dezelfde lengte hebben.
kaart3 - O(N) - - - Hiermee wordt een verzameling gemaakt waarvan de elementen de resultaten zijn van het toepassen van de opgegeven functie op de bijbehorende elementen van de drie verzamelingen tegelijk.
Mapi O(N) O(N) O(N) - - Hiermee wordt een matrix gemaakt waarvan de elementen de resultaten zijn van het toepassen van de opgegeven functie op elk element van de matrix. De gehele index die wordt doorgegeven aan de functie, geeft de index aan van het element dat wordt getransformeerd.
mapi2 O(N) O(N) - - - Hiermee bouwt u een verzameling waarvan de elementen de resultaten zijn van het toepassen van de opgegeven functie op de bijbehorende elementen van de twee verzamelingen, waarbij ook de index van de elementen wordt doorgegeven. De twee invoermatrices moeten dezelfde lengte hebben.
max O(N) O(N) O(N) - - Retourneert het grootste element in de verzameling, vergeleken met behulp van de operator max .
maxBy O(N) O(N) O(N) - - Retourneert het grootste element in de verzameling, vergeleken met het maximum van het functieresultaat.
maxElement - - - - O(log(N)) Retourneert het grootste element in de set op basis van de volgorde die voor de set wordt gebruikt.
min. O(N) O(N) O(N) - - Retourneert het minste element in de verzameling, vergeleken met behulp van de min-operator .
minBy O(N) O(N) O(N) - - Retourneert het minste element in de verzameling, vergeleken met behulp van de min-operator voor het resultaat van de functie.
minElement - - - - O(log(N)) Retourneert het laagste element in de set op basis van de volgorde die voor de set wordt gebruikt.
ofArray - O(N) O(1) O(N) O(N) Hiermee maakt u een verzameling die dezelfde elementen bevat als de opgegeven matrix.
ofList O(N) - O(1) O(N) O(N) Hiermee maakt u een verzameling die dezelfde elementen bevat als de opgegeven lijst.
ofSeq O(N) O(N) - O(N) O(N) Hiermee maakt u een verzameling die dezelfde elementen bevat als de opgegeven reeks.
Paarsgewijs - - O(N) - - Retourneert een reeks van elk element in de invoerreeks en de voorafgaande elementen, met uitzondering van het eerste element, dat alleen als voorafgaande element van het tweede element wordt geretourneerd.
partitie O(N) O(N) - O(N) O(N) Splitst de verzameling in twee verzamelingen. De eerste verzameling bevat de elementen waarvoor het opgegeven predicaat retourneert true, en de tweede verzameling bevat de elementen waarvoor het opgegeven predicaat retourneert false.
Permute O(N) O(N) - - - Retourneert een matrix met alle elementen permutatie volgens de opgegeven permutatie.
Kies O(N) O(N) O(N) O(log(N)) - De opgegeven functie wordt toegepast op opeenvolgende elementen en retourneert het eerste resultaat waarbij de functie Some retourneert. Als de functie nooit Sommige retourneert, System.Collections.Generic.KeyNotFoundException wordt deze verhoogd.
alleen-lezen - - O(N) - - Hiermee maakt u een reeksobject dat delegert aan het opgegeven reeksobject. Deze bewerking zorgt ervoor dat een typecast de oorspronkelijke volgorde niet opnieuw kan ontdekken en dempen. Als u bijvoorbeeld een matrix krijgt, retourneert de geretourneerde reeks de elementen van de matrix, maar kunt u het geretourneerde reeksobject niet casten naar een matrix.
Verminderen O(N) O(N) O(N) - - Hiermee past u een functie toe op elk element van de verzameling, waarbij een accumulatorargument wordt verbonden via de berekening. Deze functie begint met het toepassen van de functie op de eerste twee elementen, geeft dit resultaat door aan de functie, samen met het derde element, enzovoort. De functie retourneert het uiteindelijke resultaat.
reduceBack O(N) O(N) - - - Hiermee past u een functie toe op elk element van de verzameling, waarbij een accumulatorargument wordt verbonden via de berekening. Als de invoerfunctie f is en de elementen i0 zijn... iN, deze functie berekent f i0 (... (f iN-1 iN)).
remove - - - O(log(N)) O(log(N)) Hiermee verwijdert u een element uit het domein van de kaart. Er wordt geen uitzondering gegenereerd als het element niet aanwezig is.
Repliceren - O(N) - - - Hiermee maakt u een lijst met een opgegeven lengte met elk element dat is ingesteld op de opgegeven waarde.
Rev O(N) O(N) - - - Retourneert een nieuwe lijst met de elementen in omgekeerde volgorde.
scannen O(N) O(N) O(N) - - Hiermee past u een functie toe op elk element van de verzameling, waarbij een accumulatorargument wordt verbonden via de berekening. Met deze bewerking wordt de functie toegepast op het tweede argument en het eerste element van de lijst. De bewerking geeft dit resultaat vervolgens door aan de functie, samen met het tweede element, enzovoort. Ten slotte retourneert de bewerking de lijst met tussenliggende resultaten en het uiteindelijke resultaat.
scanBack O(N) O(N) - - - Lijkt op de foldBack-bewerking, maar retourneert zowel de tussenliggende als de uiteindelijke resultaten.
Singleton - - O(1) - O(1) Retourneert een reeks die slechts één item oplevert.
set O(1) - - - - Hiermee stelt u een element van een matrix in op de opgegeven waarde.
skip - - O(N) - - Retourneert een reeks die N-elementen van de onderliggende reeks overslaat en vervolgens de resterende elementen van de reeks oplevert.
in de tussentijd overslaan - - O(N) - - Retourneert een reeks die, wanneer deze wordt ge curseerd, elementen van de onderliggende reeks overslaat terwijl het opgegeven predicaat retourneert true en vervolgens de resterende elementen van de reeks oplevert.
sort O(N*log(N)) gemiddelde

O(N^2) slechtst geval
O(N*log(N)) O(N*log(N)) - - Hiermee sorteert u de verzameling op elementwaarde. Elementen worden vergeleken met vergelijkingen.
sortBy O(N*log(N)) gemiddelde

O(N^2) slechtst geval
O(N*log(N)) O(N*log(N)) - - Hiermee sorteert u de opgegeven lijst met sleutels die de opgegeven projectie biedt. Sleutels worden vergeleken met vergelijkingen.
sortInPlace O(N*log(N)) gemiddelde

O(N^2) slechtst geval
- - - - Sorteert de elementen van een matrix door deze op hun plaats te dempen en de opgegeven vergelijkingsfunctie te gebruiken. Elementen worden vergeleken met behulp van vergelijken.
sortInPlaceBy O(N*log(N)) gemiddelde

O(N^2) slechtst geval
- - - - Sorteert de elementen van een matrix door deze op hun plaats te dempen en de opgegeven projectie voor de sleutels te gebruiken. Elementen worden vergeleken met behulp van vergelijken.
sortInPlaceWith O(N*log(N)) gemiddelde

O(N^2) slechtst geval
- - - - Sorteert de elementen van een matrix door deze op hun plaats te dempen en de opgegeven vergelijkingsfunctie te gebruiken als de volgorde.
sortWith O(N*log(N)) gemiddelde

O(N^2) slechtst geval
O(N*log(N)) - - - Hiermee sorteert u de elementen van een verzameling met behulp van de opgegeven vergelijkingsfunctie als volgorde en retourneert u een nieuwe verzameling.
sub O(N) - - - - Hiermee wordt een matrix gebouwd die het opgegeven subbereik bevat door de index en lengte te starten.
som O(N) O(N) O(N) - - Retourneert de som van de elementen in de verzameling.
sumBy O(N) O(N) O(N) - - Retourneert de som van de resultaten die worden gegenereerd door de functie toe te passen op elk element van de verzameling.
Staart - O(1) - - - Retourneert de lijst zonder het eerste element.
take - - O(N) - - Retourneert de elementen van de reeks tot een opgegeven telling.
neem in de tussentijd - - O(1) - - Retourneert een reeks die, wanneer deze wordt ge curseerd, elementen van de onderliggende reeks oplevert terwijl het opgegeven predicaat retourneert true en vervolgens geen elementen meer retourneert.
toArray - O(N) O(N) O(N) O(N) Hiermee maakt u een matrix op basis van de opgegeven verzameling.
toList O(N) - O(N) O(N) O(N) Hiermee maakt u een lijst van de opgegeven verzameling.
toSeq O(1) O(1) - O(1) O(1) Hiermee maakt u een reeks van de opgegeven verzameling.
truncate - - O(1) - - Retourneert een reeks die, wanneer geïnventariseerd, niet meer dan N-elementen retourneert.
tryFind O(N) O(N) O(N) O(log(N)) - Zoekt naar een element dat voldoet aan een bepaald predicaat.
tryFindIndex O(N) O(N) O(N) - - Zoekt naar het eerste element dat voldoet aan een bepaald predicaat en retourneert de index van het overeenkomende element, of None als er geen dergelijk element bestaat.
tryFindKey - - - O(log(N)) - Retourneert de sleutel van de eerste toewijzing in de verzameling die voldoet aan het opgegeven predicaat of retourneert None als er geen dergelijk element bestaat.
tryPick O(N) O(N) O(N) O(log(N)) - De opgegeven functie wordt toegepast op opeenvolgende elementen en retourneert het eerste resultaat waarbij de functie een bepaalde waarde retourneert Some . Als er geen dergelijk element bestaat, wordt de bewerking geretourneerd None.
Ontvouwen - - O(N) - - Retourneert een reeks die de elementen bevat die door de opgegeven berekening worden gegenereerd.
union - - - - O(M*log(N)) Berekent de samenvoeging van de twee sets.
unionMany - - - - O(N1*N2...) Berekent de samenvoeging van een reeks sets.
Unzip O(N) O(N) O(N) - - Hiermee wordt een lijst met paren gesplitst in twee lijsten.
uitpakken3 O(N) O(N) O(N) - - Hiermee wordt een lijst met drievoudige waarden gesplitst in drie lijsten.
Windowed - - O(N) - - Retourneert een reeks die schuifvensters oplevert van elementen die uit de invoerreeks worden getrokken. Elk venster wordt geretourneerd als een nieuwe matrix.
Zip O(N) O(N) O(N) - - Combineert de twee verzamelingen in een lijst met paren. De twee lijsten moeten even lang zijn.
zip3 O(N) O(N) O(N) - - Combineert de drie verzamelingen in een lijst met drievoudige verzamelingen. De lijsten moeten even lang zijn.

Zie ook