Мне не нравится использовать индексированный массив без каких-либо причин, кроме как я думаю, что он выглядит уродливым. Есть ли простой способ суммировать анонимную функцию? Можно ли это сделать без использования каких-либо внешних переменных?
Каков самый чистый способ получить сумму чисел в коллекции/списке в Dart?
Ответ 1
Теперь итераторы Dart имеют функцию уменьшения (https://code.google.com/p/dart/issues/detail?id=1649), поэтому вы можете сделать сумму достоверно, не определяя свою собственную функцию сгиба:
var sum = [1, 2, 3].reduce((a, b) => a + b);
Ответ 2
int sum = [1, 2, 3].fold(0, (previous, current) => previous + current);
или с более короткими именами переменных, чтобы уменьшить занятость:
int sum = [1, 2, 3].fold(0, (p, c) => p + c);
Ответ 3
Я все еще думаю, что очевидный путь более чист и понятен для этой конкретной проблемы.
num sum = 0;
[1, 2, 3].forEach((num e){sum += e;});
print(sum);
или
num sum = 0;
for (num e in [1,2,3]) {
sum += e;
}
Ответ 4
Нет чистого способа сделать это, используя основные библиотеки, как сейчас, но если вы перевернете свой собственный foldLeft, то есть
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;
}
Я поговорил с командой Дарта о добавлении foldLeft в основные коллекции, и я надеюсь, что он скоро появится.
Ответ 5
import 'package:queries/collections.dart';
void main() {
var data = [0, 1, 2, null, 3];
var sum = Collection(data).sum();
print(sum);
}
Ответ 6
Вы можете использовать следующее:
var list = [1, 2, 3];
var sum = list.reduce((curr, next) => curr + next);
var sum2 = list.fold(0, (curr, next) => curr + next);
print('$sum, $sum2'); // Output: 6, 6
Ответ 7
Для меня использование forEach
- лучший способ. Для этого примера название списка: myList
с тремя элементами.
var myList = [1,2,3];
num sum=0;
myList.forEach((Iterable){sum += Iterable;});
print(sum);