F#-Auflistungstypen

Indem Sie dieses Thema durcharbeiten, können Sie ermitteln, welcher F#-Auflistungstyp sich für eine bestimmte Anforderung am besten eignet. Diese Auflistungstypen unterscheiden sich von den Auflistungstypen in .NET, etwa denen im System.Collections.Generic-Namespace, da die F#-Auflistungstypen aus einer funktionalen Programmierperspektive anstelle einer objektorientierten Perspektive entworfen werden. Genauer gesagt weist nur die Arrayauflistung veränderliche Elemente auf. Wenn Sie eine Auflistung ändern, erstellen Sie daher eine Instanz der geänderten Auflistung, statt die ursprüngliche Auflistung zu ändern.

Auflistungstypen unterscheiden sich außerdem in der Art der Datenstruktur, in der Objekte gespeichert werden. Datenstrukturen wie Hashtabellen, verknüpfte Listen und Arrays weisen unterschiedliche Leistungsmerkmale und einen anderen Satz verfügbarer Vorgänge auf.

Tabelle mit Auflistungstypen

In der folgenden Tabelle sind F#-Auflistungstypen aufgeführt.

type BESCHREIBUNG Ähnliche Themen
Liste Eine geordnete, unveränderliche Reihe von Elementen desselben Typs. Als verknüpfte Liste implementiert. Listen

List-Modul
Array Eine nullbasierte, änderbare Auflistung fester Größe von aufeinander folgenden Datenelementen, die alle den gleichen Typ aufweisen. Arrays

Array-Modul

Array2D-Modul

Array3D-Modul
seq Eine logische Reihe von Elementen, die alle den gleichen Typ aufweisen. Sequenzen sind besonders nützlich, wenn Sie über eine große, geordnete Sammlung von Daten verfügen, aber nicht unbedingt alle Elemente auch verwenden möchten. Einzelne Sequenzelemente werden nur bei Bedarf berechnet, daher kann mit einer Sequenz eine bessere Leistung als mit einer Liste erreicht werden, wenn nicht alle Elemente verwendet werden. Sequenzen werden durch den seq<'T>-Typ dargestellt, der ein Alias für IEnumerable<T> ist. Daher kann jeder Typ von .NET Framework, der System.Collections.Generic.IEnumerable<'T> implementiert, als Sequenz verwendet werden. Sequenzen

Seq-Modul
Map Ein unveränderliches Wörterbuch von Elementen. Der Zugriff auf Elemente erfolgt über Schlüssel. Map-Modul
Set Eine unveränderliche Menge, die auf binären Strukturen basiert. Als Vergleich dient die F#-Strukturvergleichsfunktion, die möglicherweise Implementierungen der System.IComparable-Schnittstelle für Schlüsselwerte verwendet. Set-Modul

Funktionstabelle

Dieser Abschnitt enthält einen Vergleich der Funktionen, die für F#-Auflistungstypen verfügbar sind. Die Rechenkomplexität der Funktion wird angegeben, wobei N die Größe der ersten Auflistung und M die Größe der zweiten Auflistung ist, falls vorhanden. Ein Bindestrich (-) gibt an, dass diese Funktion in der Auflistung nicht verfügbar ist. Da Sequenzen verzögert ausgewertet werden, kann eine Funktion wie Seq.distinct O(1) sein, da sie sofort zurückgibt, was sich aber trotzdem auf die Leistung der Sequenz beim Aufzählen auswirkt.

Funktion Array List Sequenz Karte Set BESCHREIBUNG
append O(N) O(N) O(N) - - Gibt eine neue Auflistung zurück, die die Elemente der ersten Auflistung gefolgt von Elementen der zweiten Auflistung enthält.
add - - - O(log(N)) O(log(N)) Gibt eine neue Auflistung mit dem hinzugefügten Element zurück.
average O(N) O(N) O(N) - - Gibt den Mittelwert der Elemente in der Auflistung zurück.
averageBy O(N) O(N) O(N) - - Gibt den Mittelwert der Ergebnisse der angegebenen Funktion bei der Anwendung auf jedes Element zurück.
blit O(N) - - - - Kopiert einen Abschnitt eines Arrays.
cache - - O(N) - - Berechnet und speichert Elemente einer Sequenz.
Umwandlung - - O(N) - - Konvertiert die Elemente in den angegebenen Typ.
choose O(N) O(N) O(N) - - Wendet die angegebene Funktion f auf jedes Element x der Liste an. Gibt die Liste mit den Ergebnissen für jedes Element zurück, für das die Funktion Some(f(x)) zurückgibt.
collect O(N) O(N) O(N) - - Wendet die angegebene Funktion auf jedes Element der Auflistung an, verkettet alle Ergebnisse und gibt die kombinierte Liste zurück.
compareWith - - O(N) - - Vergleicht zwei Sequenzen mithilfe der angegebenen Vergleichsfunktion, Element für Element.
concat O(N) O(N) O(N) - - Kombiniert die angegebene Enumeration der Enumerationen zu einer einzelnen verketteten Enumeration.
contains - - - - O(log(N)) Gibt „true“ zurück, wenn die Menge das angegebene Element enthält.
containsKey - - - O(log(N)) - Prüft, ob sich ein Element in der Domäne einer Zuordnung befindet.
count - - - - O(N) Gibt die Anzahl der Elemente im Satz zurück.
countBy - - O(N) - - Wendet eine schlüsselgenerierende Funktion auf jedes Element einer Sequenz an und gibt eine Sequenz zurück, die eindeutige Schlüssel und deren Anzahl von Vorkommen in der ursprünglichen Sequenz ergibt.
copy O(N) - O(N) - - Kopiert die Auflistung.
create O(N) - - - - Erstellt ein Array aus ganzen Elementen, die alle anfänglich den angegebenen Wert aufweisen.
delay - - O(1) - - Gibt eine Sequenz zurück, die aus der angegebenen verzögerten Spezifikation einer Sequenz erstellt wird.
Unterschied - - - - O(M*log(N)) Gibt eine neue Menge zurück, in der die Elemente der zweiten Menge aus der ersten Menge entfernt wurden.
distinct O(1)* Gibt eine Sequenz zurück, die nach generischen Hash- und Gleichheitsvergleichen der Einträge keine doppelten Einträge enthält. Wenn ein Element mehrmals in der Sequenz vorkommt, werden spätere Vorkommen verworfen.
distinctBy O(1)* Gibt eine Sequenz zurück, die nach den generischen Hash- und Gleichheitsvergleichen der Schlüssel keine doppelten Einträge enthält, die von der angegebenen Schlüsselgenerierungsfunktion zurückgegeben werden. Wenn ein Element mehrmals in der Sequenz vorkommt, werden spätere Vorkommen verworfen.
empty O(1) O(1) O(1) O(1) O(1) Erstellt eine leere Auflistung.
exists O(N) O(N) O(N) O(log(N)) O(log(N)) Prüft, ob ein Element der Sequenz das angegebene Prädikat erfüllt.
exists2 O(min(N,M)) - O(min(N,M)) Prüft, ob ein Paar aus entsprechenden Elementen der Eingabesequenzen das angegebene Prädikat erfüllt.
fill O(N) Legt einen Bereich von Elementen des Arrays auf den angegebenen Wert fest.
filter O(N) O(N) O(N) O(N) O(N) Gibt eine neue Auflistung zurück, die nur die Elemente der Auflistung enthält, für die das angegebene Prädikat true zurückgibt.
Suchen O(N) O(N) O(N) O(log(N)) - Gibt das erste Element zurück, für das die angegebene Funktion true zurückgibt. Gibt System.Collections.Generic.KeyNotFoundException zurück, wenn kein solches Element vorhanden ist.
findIndex O(N) O(N) O(N) - - Gibt den Index des ersten Elements im Array zurück, das das angegebene Prädikat erfüllt. Löst System.Collections.Generic.KeyNotFoundException aus, wenn kein Element das Prädikat erfüllt.
findKey - - - O(log(N)) - Wertet die Funktion für jede Zuordnung in der Auflistung aus und gibt den Schlüssel für die erste Zuordnung zurück, bei der die Funktion true zurückgibt. Wenn kein solches Element vorhanden ist, löst diese Funktion System.Collections.Generic.KeyNotFoundException aus.
fold O(N) O(N) O(N) O(N) O(N) Wendet eine Funktion auf jedes Element der Auflistung an und threadet dazu ein Akkumulatorargument durch die Berechnung. Wenn die Eingabefunktion f ist und die Elemente i0... iN sind, wird diese Funktion als f (... (f s i0)...) In berechnet.
fold2 O(N) O(N) - - - Wendet eine Funktion auf die entsprechenden Elemente von zwei Auflistungen an und threadet dazu ein Akkumulatorargument durch die Berechnung. Die Auflistungen müssen die identische Größe aufweisen. Wenn die Eingabefunktion f ist und die Elemente i0...iN und j0...jN sind, wird diese Funktion als f (... (f s i0 j0)...) iN jN berechnet.
foldBack O(N) O(N) - O(N) O(N) Wendet eine Funktion auf jedes Element der Auflistung an und threadet dazu ein Akkumulatorargument durch die Berechnung. Wenn die Eingabefunktion f ist und die Elemente i0... iN sind, wird diese Funktion als f i0 (...(f iN s)) berechnet.
foldBack2 O(N) O(N) - - - Wendet eine Funktion auf die entsprechenden Elemente von zwei Auflistungen an und threadet dazu ein Akkumulatorargument durch die Berechnung. Die Auflistungen müssen die identische Größe aufweisen. Wenn die Eingabefunktion f ist und die Elemente i0...iN und j0...jN sind, wird diese Funktion als f i0 j0 (...(f iN jN s)) berechnet.
forall O(N) O(N) O(N) O(N) O(N) Prüft, ob alle Elemente der Auflistung dem angegebenen Prädikat entsprechen.
forall2 O(N) O(N) O(N) - - Prüft, ob alle entsprechenden Elemente der Auflistung das angegebene Prädikat paarweise erfüllen.
get / nth O(1) O(N) O(N) - - Gibt ein Element aus der Auflistung aufgrund seines Index zurück.
head - O(1) O(1) - - Gibt das erste Element der Auflistung zurück.
init O(N) O(N) O(1) - - Erstellt eine Auflistung unter Verwendung der angegebenen Dimensionen und einer Generatorfunktion, mit der die Elemente berechnet werden.
initInfinite - - O(1) - - Generiert eine Sequenz, die beim Durchlaufen durch Aufrufen der angegebenen Funktion aufeinanderfolgende Elemente zurückgibt.
intersect - - - - O(log(N)*log(M)) Berechnet die Schnittmenge von zwei Mengen.
intersectMany - - - - O(N1*N2...) Berechnet die Schnittmenge einer Sequenz von Mengen. Die Sequenz darf nicht leer sein.
isEmpty O(1) O(1) O(1) O(1) - Gibt true zurück, wenn die Auflistung leer ist.
isProperSubset - - - - O(M*log(N)) Gibt true zurück, wenn alle Elemente der ersten Menge in der zweiten Menge enthalten sind und mindestens ein Element der zweiten Menge nicht in der ersten Menge enthalten ist.
isProperSuperset - - - - O(M*log(N)) Gibt true zurück, wenn alle Elemente der zweiten Menge in der ersten Menge enthalten sind und mindestens ein Element der ersten Menge nicht in der zweiten Menge enthalten ist.
isSubset - - - - O(M*log(N)) Gibt true zurück, wenn alle Elemente der ersten Menge in der zweiten Menge enthalten sind.
isSuperset - - - - O(M*log(N)) Gibt true zurück, wenn alle Elemente der zweiten Menge in der ersten Menge enthalten sind.
iter O(N) O(N) O(N) O(N) O(N) Wendet die angegebene Funktion auf jedes Element der Auflistung an.
iteri O(N) O(N) O(N) - - Wendet die angegebene Funktion auf jedes Element der Auflistung an. Die an die Funktion übergebene Ganzzahl gibt den Index des Elements an.
iteri2 O(N) O(N) - - - Wendet die angegebene Funktion auf ein Paar von Elementen an, die aus übereinstimmenden Indizes in zwei Arrays gezogen werden. Die an die Funktion übergebene Ganzzahl gibt den Index des Elements an. Die beiden Indizes müssen dieselbe Länge aufweisen.
iter2 O(N) O(N) O(N) - - Wendet die angegebene Funktion auf ein Paar von Elementen an, die aus übereinstimmenden Indizes in zwei Arrays gezogen werden. Die beiden Arrays müssen dieselbe Länge aufweisen.
last O(1) O(N) O(N) - - Gibt das letzte Element in der betreffenden Auflistung zurück.
length O(1) O(N) O(N) - - Ruft die Anzahl der Elemente in der Auflistung ab.
Karte O(N) O(N) O(1) - - Wendet die angegebene Funktion auf jedes Element im Array an und erstellt aus den Ergebnissen eine Auflistung.
map2 O(N) O(N) O(1) - - Erstellt eine Auflistung, deren Elemente das Ergebnis der paarweisen Anwendung der angegebenen Funktion auf die entsprechenden Elemente der beiden Auflistungen sind. Die beiden Eingabearrays müssen dieselbe Länge aufweisen.
map3 - O(N) - - - Erstellt eine Auflistung, deren Elemente das Ergebnis der gleichzeitigen Anwendung der angegebenen Funktion auf die entsprechenden Elemente der drei Auflistungen sind.
mapi O(N) O(N) O(N) - - Wendet die angegebene Funktion auf jedes Element im Array an und erstellt aus den Ergebnissen ein Array. Der ganzzahlige Index, der an die Funktion übergeben wird, gibt den Index des zu transformierenden Elements an.
mapi2 O(N) O(N) - - - Erstellt eine Auflistung, deren Elemente das Ergebnis der paarweisen Anwendung der angegebenen Funktion auf die entsprechenden Elemente der beiden Auflistungen sind, und übergibt außerdem den Index der Elemente. Die beiden Eingabearrays müssen dieselbe Länge aufweisen.
max O(N) O(N) O(N) - - Gibt das größte Element in der Auflistung zurück, verglichen mithilfe des max-Operators.
maxBy O(N) O(N) O(N) - - Gibt das größte Element in der Auflistung zurück, verglichen durch Anwendung von max auf das Ergebnis der Funktion.
maxElement - - - - O(log(N)) Gibt das größte Element in der Menge entsprechend der für die Menge verwendeten Sortierung zurück.
Min. O(N) O(N) O(N) - - Gibt das kleinste Element in der Auflistung zurück, verglichen mithilfe des min-Operators.
minBy O(N) O(N) O(N) - - Gibt das kleinste Element in der Auflistung zurück, verglichen durch Anwendung des min-Operators auf das Ergebnis der Funktion.
minElement - - - - O(log(N)) Gibt das niedrigste Element in der Menge entsprechend der für die Menge verwendeten Sortierung zurück.
ofArray - O(N) O(1) O(N) O(N) Erstellt eine Auflistung, die dieselben Elemente wie das angegebene Array enthält.
ofList O(N) - O(1) O(N) O(N) Erstellt eine Auflistung, die dieselben Elemente wie die angegebene Liste enthält.
ofSeq O(N) O(N) - O(N) O(N) Erstellt eine Auflistung, die dieselben Elemente wie die angegebene Sequenz enthält.
pairwise - - O(N) - - Gibt eine Sequenz jedes Elements in der Eingabesequenz und seines Vorgängers zurück, mit Ausnahme des ersten Elements, das nur als Vorgänger des zweiten Elements zurückgegeben wird.
partition O(N) O(N) - O(N) O(N) Teilt die Auflistung in zwei Auflistungen auf. Die erste Auflistung enthält die Elemente, für die das angegebene Prädikat true zurückgibt, und die zweite Auflistung die Elemente, für die das angegebene Prädikat false zurückgibt.
permute O(N) O(N) - - - Gibt ein Array zurück, in dem alle Elemente gemäß der angegebenen Permutation permutiert sind.
pick O(N) O(N) O(N) O(log(N)) - Wendet die angegebene Funktion auf aufeinander folgende Elemente an und gibt das erste Ergebnis zurück, für das die Funktion „Some“ zurückgibt. Wenn die Funktion nie „Some“ zurückgibt, wird System.Collections.Generic.KeyNotFoundException ausgelöst.
readonly - - O(N) - - Erstellt ein Sequenzobjekt, das an das angegebene Sequenzobjekt delegiert. Dieser Vorgang stellt sicher, dass eine Typumwandlung die ursprüngliche Sequenz nicht erneut entdecken und verändern kann. Wenn beispielsweise ein Array angegeben wird, gibt die zurückgegebene Sequenz die Elemente des Arrays zurück, jedoch können Sie das zurückgegebene Sequenzobjekt nicht in ein Array umwandeln.
reduce O(N) O(N) O(N) - - Wendet eine Funktion auf jedes Element der Auflistung an und threadet dazu ein Akkumulatorargument durch die Berechnung. Diese Funktion beginnt mit dem Anwenden der Funktion auf die ersten beiden Elemente, übergibt dieses Ergebnis zusammen mit dem dritten Element usw. an die Funktion. Die Funktion gibt das Endergebnis zurück.
reduceBack O(N) O(N) - - - Wendet eine Funktion auf jedes Element der Auflistung an und threadet dazu ein Akkumulatorargument durch die Berechnung. Wenn die Eingabefunktion f ist und die Elemente i0...iN sind, wird diese Funktion als f i0 (...(f iN-1 iN)) berechnet.
remove - - - O(log(N)) O(log(N)) Entfernt ein Element aus der Domäne der Zuordnung. Wenn das Element nicht vorhanden ist, wird keine Ausnahme ausgelöst.
replicate - O(N) - - - Erstellt eine Liste mit einer angegebenen Länge mit jedem Element, das auf den angegebenen Wert festgelegt ist.
rev O(N) O(N) - - - Gibt eine neue Liste mit den Elementen in umgekehrter Reihenfolge zurück.
scan O(N) O(N) O(N) - - Wendet eine Funktion auf jedes Element der Auflistung an und threadet dazu ein Akkumulatorargument durch die Berechnung. Dieser Vorgang wendet die Funktion auf das zweite Argument und das erste Element der Liste an. Der Vorgang übergibt dieses Ergebnis dann zusammen mit dem zweiten Element usw. an die Funktion. Schließlich gibt der Vorgang die Liste der Zwischenergebnisse und das Endergebnis zurück.
scanBack O(N) O(N) - - - Ähnelt dem foldBack-Vorgang, gibt aber sowohl die Zwischenergebnisse als auch das Endergebnis zurück.
singleton - - O(1) - O(1) Gibt eine Sequenz zurück, die nur ein Element ergibt.
set O(1) - - - - Legt ein Element eines Arrays auf den angegebenen Wert fest.
skip - - O(N) - - Gibt eine Sequenz zurück, die N Elemente der zugrunde liegenden Sequenz überspringt und dann die verbleibenden Elemente der Sequenz ergibt.
skipWhile - - O(N) - - Gibt eine Sequenz zurück, in der beim Durchlaufen Elemente der zugrunde liegenden Sequenz übersprungen werden, sofern das angegebene Prädikat true zurückgibt, und ergibt dann die verbleibenden Elemente der Sequenz.
sort O(N*log(N)) average

O(N^2) worst case
O(N*log(N)) O(N*log(N)) - - Sortiert die Auflistung nach dem Elementwert. Die Elemente werden mithilfe von compare verglichen.
sortBy O(N*log(N)) average

O(N^2) worst case
O(N*log(N)) O(N*log(N)) - - Sortiert die angegebene Liste mithilfe von Schlüsseln, die von der angegebenen Projektion bereitgestellt werden. Die Schlüssel werden mithilfe von compare verglichen.
sortInPlace O(N*log(N)) average

O(N^2) worst case
- - - - Sortiert die Elemente eines Arrays durch Änderung an Ort und Stelle und Verwenden der angegebenen Vergleichsfunktion. Die Elemente werden mithilfe von compare verglichen.
sortInPlaceBy O(N*log(N)) average

O(N^2) worst case
- - - - Sortiert die Elemente eines Arrays durch Ändern an Ort und Stelle unter Verwendung der angegebenen Projektion für die Schlüssel. Die Elemente werden mithilfe von compare verglichen.
sortInPlaceWith O(N*log(N)) average

O(N^2) worst case
- - - - Sortiert die Elemente eines Arrays durch Änderung an Ort und Stelle und Verwenden der angegebenen Vergleichsfunktion als Reihenfolge.
sortWith O(N*log(N)) average

O(N^2) worst case
O(N*log(N)) - - - Sortiert die Elemente einer Auflistung unter Verwendung der angegebenen Vergleichsfunktion als Reihenfolge und gibt eine neue Auflistung zurück.
sub O(N) - - - - Erstellt ein Array, das den angegebenen Unterbereich enthält, der durch den Startindex und die Länge angegeben wird.
Sum O(N) O(N) O(N) - - Gibt die Summe der Elemente in der Auflistung zurück.
sumBy O(N) O(N) O(N) - - Gibt die Summe der Ergebnisse zurück, die durch Anwenden der Funktion auf jedes Element der Auflistung generiert werden.
tail - O(1) - - - Gibt die Liste ohne das erste Element zurück.
take - - O(N) - - Gibt die Elemente der Sequenz bis zu einer angegebenen Anzahl zurück.
takeWhile - - O(1) - - Gibt eine Sequenz zurück, die beim Durchlaufen Elemente der zugrunde liegenden Sequenz ergibt, solange das angegebene Prädikat true zurückgibt, und gibt dann keine weiteren Elemente mehr zurück.
toArray - O(N) O(N) O(N) O(N) Erstellt ein Array aus der angegebenen Auflistung.
toList O(N) - O(N) O(N) O(N) Erstellt eine Liste aus der angegebenen Auflistung.
toSeq O(1) O(1) - O(1) O(1) Erstellt eine Sequenz aus der angegebenen Auflistung.
truncate - - O(1) - - Gibt eine Sequenz zurück, die beim Aufzählen nicht mehr als N Elemente zurückgibt.
tryFind O(N) O(N) O(N) O(log(N)) - Sucht nach einem Element, das ein bestimmtes Prädikat erfüllt.
tryFindIndex O(N) O(N) O(N) - - Sucht nach dem ersten Element, das ein bestimmtes Prädikat erfüllt, und gibt den Index des übereinstimmenden Elements zurück, oder None, wenn kein solches Element vorhanden ist.
tryFindKey - - - O(log(N)) - Gibt den Schlüssel der ersten Zuordnung in der Auflistung zurück, die das angegebene Prädikat erfüllt, oder gibt None zurück, wenn kein solches Element vorhanden ist.
tryPick O(N) O(N) O(N) O(log(N)) - Wendet die angegebene Funktion auf aufeinander folgende Elemente an und gibt das erste Ergebnis zurück, für das die Funktion Some für einen Wert zurückgibt. Wenn kein solches Element vorhanden ist, gibt der Vorgang None zurück.
unfold - - O(N) - - Gibt eine Sequenz zurück, die die Elemente enthält, die durch die angegebene Berechnung generiert werden.
union - - - - O(M*log(N)) Berechnet die Vereinigungsmenge der beiden Mengen.
unionMany - - - - O(N1*N2...) Berechnet die Vereinigungsmenge einer Sequenz von Mengen.
unzip O(N) O(N) O(N) - - Teilt eine Liste von Paaren in zwei Listen auf.
unzip3 O(N) O(N) O(N) - - Teilt eine Liste von Tripeln in drei Listen auf.
windowed - - O(N) - - Gibt eine Sequenz zurück, die gleitende Fenster von enthaltenen Elementen ergibt, die aus der Eingabesequenz gezogen werden. Jedes Fenster wird als neues Array zurückgegeben.
zip O(N) O(N) O(N) - - Kombiniert die beiden Auflistungen in einer Liste von Paaren. Die beiden Listen müssen die gleiche Länge aufweisen.
zip3 O(N) O(N) O(N) - - Kombiniert die drei Auflistungen zu einer Liste von Tripeln. Die Listen müssen die gleiche Länge aufweisen.

Weitere Informationen