Freigeben über


List.fold2<'T1,'T2,'State>-Funktion (F#)

Wendet eine Funktion auf zusammengehörende Elemente in zwei Auflistungen an, wobei ein Akkumulatorargument in der Berechnung mitgeführt wird. Die Auflistungen müssen dieselbe Größe haben. Ist die Eingabefunktion f und sind die Elemente i0...iN und j0...jN, wird f (... (f s i0 j0)...) iN jN berechnet.

Namespace/Modulpfad: Microsoft.FSharp.Collections.List

Assembly: FSharp.Core (in FSharp.Core.dll)

// Signature:
List.fold2 : ('State -> 'T1 -> 'T2 -> 'State) -> 'State -> 'T1 list -> 'T2 list -> 'State

// Usage:
List.fold2 folder state list1 list2

Parameter

  • folder
    Typ: 'State -> 'T1 -> 'T2 -> 'State

    Die Funktion, mit der der Zustand der Eingabeelemente aktualisiert wird.

  • state
    Typ: 'State

    Der Ausgangszustand.

  • list1
    Typ: 'T1 list

    Die erste Eingabeliste.

  • list2
    Typ: 'T2 list

    Die zweite Eingabeliste.

Rückgabewert

Der endgültige Zustandswert.

Ausnahmen

Ausnahme

Bedingung

ArgumentException

Wird ausgelöst, wenn die Eingabelisten unterschiedlich lang sind.

Hinweise

Der Name dieser Funktion in kompilierten Assemblys lautet Fold2. Verwenden Sie diesen Namen, wenn Sie in einer anderen .NET-Sprache als F# oder durch Reflektion auf die Funktion zugreifen.

Beispiel

Das folgende Codebeispiel veranschaulicht die Verwendung von List.fold2.

// Use List.fold2 to perform computations over two lists (of equal size) at the same time.
// Example: Sum the greater element at each list position.
let sumGreatest list1 list2 = List.fold2 (fun acc elem1 elem2 ->
                                              acc + max elem1 elem2) 0 list1 list2

let sum = sumGreatest [1; 2; 3] [3; 2; 1]
printfn "The sum of the greater of each pair of elements in the two lists is %d." sum

Output

  

Das folgende Codebeispiel veranschaulicht, wie mit List.fold2 das Endsaldo eines Bankkontos nach mehreren Transaktionen berechnet wird. Die beiden Eingabelisten stellen den Transaktionstyp (Einzahlung oder Zurücknahme) und den Transaktionsbetrag dar.

// Discriminated union type that encodes the transaction type.
type Transaction =
    | Deposit
    | Withdrawal

let transactionTypes = [Deposit; Deposit; Withdrawal]
let transactionAmounts = [100.00; 1000.00; 95.00 ]
let initialBalance = 200.00

// Use fold2 to perform a calculation on the list to update the account balance.
let endingBalance = List.fold2 (fun acc elem1 elem2 ->
                                match elem1 with
                                | Deposit -> acc + elem2
                                | Withdrawal -> acc - elem2)
                                initialBalance
                                transactionTypes
                                transactionAmounts
printfn "%f" endingBalance

Output

  

Plattformen

Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Versionsinformationen

F#-Runtime

Unterstützt in: 2.0, 4.0

Silverlight

Unterstützt in: 3

Siehe auch

Weitere Ressourcen

Collections.List-Modul (F#)

Microsoft.FSharp.Collections-Namespace (F#)

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Mai 2010

Codebeispiele hinzugefügt.

Informationsergänzung.