Condividi tramite


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

Applica una funzione agli elementi corrispondenti di due raccolte, eseguendo il threading di un argomento dell'accumulatore attraverso il calcolo.Le dimensioni delle raccolte devono coincidere.Se la funzione di input è f e gli elementi sono i0...iN e j0...jN, calcola f (... (f s i0 j0)...) iN jN.

Percorso di spazio dei nomi/modulo: 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

Parametri

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

    Funzione da utilizzare per aggiornare lo stato in base agli elementi di input.

  • state
    Tipo: 'State

    Stato iniziale.

  • list1
    Tipo: 'T1list

    Primo elenco di input.

  • list2
    Tipo: 'T2list

    Secondo elenco di input.

Valore restituito

Valore dello stato finale.

Eccezioni

Eccezione

Condizione

ArgumentException

Generata se gli elenchi di input differiscono in lunghezza.

Note

Questa funzione è denominata Fold2 negli assembly compilati.Utilizzare questo nome se si accede alla funzione da un linguaggio .NET diverso da F# o tramite reflection.

Esempio

Nell'esempio di codice seguente viene illustrato l'utilizzo di 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

  

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di List.fold2 per calcolare il bilancio finale in un conto bancario dopo una serie di transazioni.I due elenchi di input rappresentano il tipo di transazione (deposito o prelievo) e l'importo della transazione.

// 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

  

Piattaforme

Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informazioni sulla versione

Versioni della libreria di base F#

Supportato in: 2,0, 4,0, portabile

Vedere anche

Riferimenti

Modulo Collections.List (F#)

Spazio dei nomi Microsoft.FSharp.Collections (F#)