Ok, sembra che dovrebbe essere facile, ma non lo capisco. Se ho una sequenza di numeri, come faccio a generare una nuova sequenza composta dai totali correnti? ad esempio per una sequenza [1; 2; 3; 4], voglio mapparla a [1; 3; 6; 10]. In un modo adeguatamente funzionale.f # sequenza del totale parziale
5
A
risposta
14
5
> Seq.scan (fun acc n -> acc + n) 0 [1;2;3;4];;
val it : seq<int> = seq [0; 1; 3; 6; ...]
Con le liste:
> [1;2;3;4] |> List.scan (fun acc n -> acc + n) 0 |> List.tail;;
val it : int list = [1; 3; 6; 10]
Edit: Un altro modo con le sequenze:
let sum s = seq {
let x = ref 0
for i in s do
x := !x + i
yield !x
}
Sì, c'è una variabile mutabile, ma trovo più leggibile (se si desidera ottenere liberarsi dello 0 iniziale).
+0
cool, grazie. Tuttavia sembra che generi una sequenza più grande, con uno 0 iniziale, non sembra una vera mappa. – Aidan
0
Non sono sicuro questo è il modo migliore, ma dovrebbe fare il trucco
let input = [1; 2; 3; 4]
let runningTotal =
(input, 0)
|> Seq.unfold (fun (list, total) ->
match list with
| [] ->
None
| h::t ->
let total = total + h
total, (t, total) |> Some)
|> List.ofSeq
13
Un'altra variazione usando Seq.scan
(Seq.skip 1
si sbarazza del leader zero):
> {1..4} |> Seq.scan (+) 0 |> Seq.skip 1;;
val it : seq<int> = seq [1; 3; 6; 10]
Problemi correlati
- 1. destrutturazione parziale in corrispondenza del pattern (F #)
- 2. Ottieni totale parziale di Magento dal carrello
- 3. Calcolare un totale parziale in MySQL
- 4. F #: applicazione parziale e calcolo preventivo
- 5. F # Aggiungi un elemento a una sequenza
- 6. F # generare una sequenza/matrice di date
- 7. Alternativa di Erlang alla sequenza f #
- 8. Posso intercettare il generatore di sequenza F #?
- 9. Aggiunta totale/totale parziale alla parte inferiore di un DataTable in lucido
- 10. LINQ a SQL e un totale parziale sui risultati ordinati
- 11. totali mensili mese ritornare NULL, e solo l'output totale parziale
- 12. Magento Checkout: ottieni il totale parziale senza iterare
- 13. Come utilizzare efficacemente gli assembly F # per il trust parziale?
- 14. Rails: Render parziale raccolta: Ottenere dimensione della collezione all'interno parziale
- 15. rendering parziale del patrimonio
- 16. mysqldump parziale del database
- 17. Prestashop - prezzo totale del carrello
- 18. Come posso verificare se una sequenza è vuota in F #?
- 19. F # Filtro di sequenza Mentre in uno stile funzionale
- 20. Come eseguire la sequenza su Elenco [F [G [A]]] per ottenere F [G [Elenco [A]]]
- 21. Crystal Reports - Riepilogo e calcolo del campo totale
- 22. F #: composizione del motivo?
- 23. Generazione del codice F #
- 24. Scala sequenza futura e gestione del timeout
- 25. Quali sono alcuni modi per combinare un numero di sottoinsiemi ordinati (potenzialmente incompatibili) di un set totale in un ordinamento (parziale) del set totale?
- 26. Mappa di hlist di tipo Shapeless F [T1] :: ... :: F [Tn] :: HNil del tipo T1 :: ... :: Tn :: HNil (sequenza di livello del tipo)
- 27. sequenza Josephus
- 28. Magento ricalcolare il totale del carrello nell'osservatore
- 29. F # array_chunk per Sequence
- 30. MySQL aggregati per mese con l'esecuzione totale
Questo è molto bello, tuttavia speravo di farlo per una sequenza piuttosto che per una lista. – Aidan
@Aidan: modificato per aggiungere l'implementazione Seq.scan corretta. – ildjarn
Cool, questo è quello. Grazie. – Aidan