Was ist der Unterschied zwischen map und collect? Dokumentation unten - ich kann den Unterschied nicht sagen ..
List.map & lt; 'T', U & gt; Funktion
Erstellt eine neue Sammlung, deren Elemente die Ergebnisse der Anwendung der gegebenen Funktion auf jedes Element der Sammlung sind.
// Unterschrift: List.map: ('T - & gt;' U) - & gt; T-Liste - & gt; 'U-Liste
List.collect & lt; 'T', U & gt; Funktion
Für jedes Element der Liste gilt die angegebene Funktion. Verkettet alle Ergebnisse und gibt die kombinierte Liste zurück.
Der Unterschied besteht darin, dass die Ausgabeliste von map
dieselbe Länge wie die Eingabeliste hat. Für collect
kann die Ausgabeliste länger oder kürzer als die Eingabe sein, da die übergebene Funktion eine Liste anstelle eines einzelnen Elements zurückgibt.
Für mehr Details - vergleichen Sie die Signaturen. Für map
und sammeln
%Vor%Sie können hier sehen, dass der Rückgabetyp des Funktionsarguments anders ist.
Ein Beispiel zur Veranschaulichung
Nehmen wir an, Sie haben eine Liste von Listen:
let list = [ [1; 2]; [3; 4]; [5; 6] ]
Und eine Transformationsfunktion:
let trans = fun x -> [for i in x -> i*10]
List.map trans list
erzeugt:
[[10; 20]; [30; 40]; [50; 60]]
Während
List.collect trans list
erzeugt:
[10; 20; 30; 40; 50; 60]
List.collect
wird die Transformationsfunktion anwenden und Concatenate
das Ergebnis, während List.map
nur die Transformationsfunktion anwendet.
Zu @ Johns Antwort hinzufügen, ist der Unterschied in dem Wort Concatenates
.
Grundsätzlich ist List.collect f xs
dasselbe wie List.concat (List.map f xs)
.
Tags und Links f# collections