Каков самый чистый способ получить сумму чисел в коллекции / списке в Dart?
Мне не нравится использовать индексированный массив без каких-либо причин, кроме того, что я думаю, что он выглядит уродливо. Есть ли чистый способ суммирования с анонимной функцией? Возможно ли это сделать без использования каких-либо внешних переменных?
4 ответов
Dart iterables теперь имеют функцию reduce (https://code.google.com/p/dart/issues/detail?id=1649), поэтому вы можете сделать сумму содержательно, не определяя свою собственную функцию сгиба:
var sum = [1, 2, 3].reduce((a, b) => a + b);
нет чистого способа сделать это, используя основные библиотеки, как они есть сейчас, но если вы свернете свой собственный метод использовать-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 к основным коллекциям, и я надеюсь, что он будет там в ближайшее время.
Я все еще думаю, что очевидный способ чище и понятнее для этой конкретной проблемы.
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;
}
int sum = [1, 2, 3].fold(0, (previous, current) => previous + current);
или с более короткими именами переменных, чтобы он занимал меньше места:
int sum = [1, 2, 3].fold(0, (p, c) => p + c);