Non mi piace utilizzare un array indicizzato per nessun altro motivo, a parte il fatto che penso che sia brutto. C'è un modo pulito per riassumere con una funzione anonima? È possibile farlo senza usare variabili esterne?Qual è il modo più pulito per ottenere la somma dei numeri in una raccolta/lista in Dart?
10
A
risposta
11
Dart iterables ora hanno una funzione di ridurre (https://code.google.com/p/dart/issues/detail?id=1649), in modo da puoi fare una somma in maniera concisa senza definire la tua funzione di piegatura:
var sum = [1, 2, 3].reduce((a, b) => a + b);
4
Non c'è un modo pulito per farlo utilizzando le librerie di base come lo sono ora, ma se si tira il proprio foldLeft poi c'è
main() {
var sum = foldLeft([1,2,3], 0, (val, entry) => val + entry);
print(sum);
}
Dynamic foldLeft(Collection collection, Dynamic val, func) {
collection.forEach((entry) => val = func(val, entry));
return val;
}
Ho parlato con la squadra Dart sull'aggiunta foldLeft alle collezioni core e spero che ci sarà presto.
4
Continuo a pensare che il modo più ovvio sia più pulito e più facile da capire per questo particolare problema.
num sum = 0;
[1, 2, 3].forEach((num e){sum += e;});
print(sum);
o
num sum = 0;
for (num e in [1,2,3]) {
sum += e;
}
3
int sum = [1, 2, 3].fold(0, (previous, current) => previous + current);
o con nomi di variabili più brevi per renderlo occupano meno spazio:
int sum = [1, 2, 3].fold(0, (p, c) => p + c);
Problemi correlati
- 1. Qual è il modo più pulito per eseguire la copia di Spring Beans in un JSP?
- 2. Qual è il modo più pulito per creare una pipeline non lineare in Bash?
- 3. Qual è il modo più pulito per ottenere il checksum di un array multidimensionale?
- 4. Qual è il modo più pulito per scrivere una stringa multilinea in JavaScript?
- 5. In Ruby, qual è il modo più pulito per ottenere l'indice del valore più grande in un array?
- 6. Qual è il modo più veloce per ottenere frequenze di numeri interi in un vettore?
- 7. Qual è il modo migliore/più breve per convertire un Iterable in uno Stream, in Dart?
- 8. Qual è il modo più pulito per visualizzare un oggetto java.util.Calendar in JSF?
- 9. Qual è il modo più pulito per includere e accedere ai dati binari in VC++ Express?
- 10. Il modo più pulito e più pignolo per ottenere la data di domani?
- 11. Qual è il modo migliore/più pulito per implementare i test A-B in asp.net mvc?
- 12. In ASP.NET, qual è il modo più rapido per ottenere l'URl di base per una richiesta?
- 13. Qual è il modo più veloce per trovare la somma maggiore di elementi adiacenti M in una matrice
- 14. Qual è il modo più intelligente/più pulito per iterare asincrono su array (o objs)?
- 15. Qual è il modo più pulito per impostare la variabile ambientale DYLD_FRAMEWORK_PATH per una build di rilascio?
- 16. Qual è il modo più rapido per controllare in modo programmatico la ben formata dei file XML in C#?
- 17. Qual è il modo più pulito per gestire gli errori di convalida con PHP?
- 18. Qual è il modo più semplice per colmare le lacune in un elenco di numeri?
- 19. Modelli Inside Express/EJS, qual è il modo più pulito per scorrere un array?
- 20. Qual è il modo più pulito per scrivere un ciclo di non blocco per javascript?
- 21. qual è il modo più veloce per ottenere la mappa secondaria di una mappa
- 22. Qual è il modo più semplice per ottenere una OutOfMemoryException in C#?
- 23. Qual è il modo più veloce per ottenere più copie di un albero in python?
- 24. Qual è il modo più pulito di fare un ordinamento più uniq su un elenco Python?
- 25. Qual è il modo più corretto per generare numeri casuali in C con pthread
- 26. Qual è il modo più semplice per analizzare i numeri in clojure?
- 27. Come trovare la somma cumulativa di numeri in una lista?
- 28. Qual è il modo migliore per ottenere numeri casuali in NumPy?
- 29. Qual è un modo pulito per gestire una chiamata di monade in un'altra?
- 30. Qual è il modo migliore per eseguire il riconoscimento dei numeri di base?
Questo potrebbe essere risolto aggiungendo una funzione di inject all'interfaccia di raccolta come in Ruby. –
Ecco un codice molto carino lì, Lars. Non solo era quello che stavo cercando, ora capisco pieghevole. –
Si può certamente farlo con una funzione anonima, con o senza codice di libreria per farlo, semplicemente inserendo il codice in foldLeft sopra. E praticamente avrai sempre bisogno di una variabile, a meno che tu non sia eccessivamente intelligente con la ricorsione. In alternativa, puoi anche farlo con un valore for (var each in ...) piuttosto che for e applicare la funzione nel corpo del ciclo for. O funziona. –