Каков самый чистый способ получить сумму чисел в коллекции / списке в 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);