114 votes

Quelle est la façon la plus propre d'obtenir la somme des nombres dans une collection / liste en Dart ?

Je n'aime pas utiliser un tableau indexé pour aucune raison autre que je trouve ça moche. Y a-t-il un moyen propre de faire la somme avec une fonction anonyme ? Est-il possible de le faire sans utiliser de variables extérieures ?

148voto

ArthurDenture Points 752

Les itérables Dart disposent désormais d'une fonction de réduction (https://code.google.com/p/dart/issues/detail?id=1649), vous pouvez donc faire une somme de manière concise sans définir votre propre fonction de pliage :

var somme = [1, 2, 3].reduce((a, b) => a + b);

141voto

Colm Sloan Points 335
int sum = [1, 2, 3].fold(0, (précédent, actuel) => précédent + actuel);

ou avec des noms de variables plus courts pour prendre moins de place :

int sum = [1, 2, 3].fold(0, (p, c) => p + c);

85voto

Tobi Points 372

C'est une question très ancienne mais

En 2022, il existe en fait un package intégré.

Il suffit d'importer

import 'package:collection/collection.dart';

et d'appeler la méthode d'extension .sum sur l'Iterable.

EXEMPLE COMPLET

import 'package:collection/collection.dart';

void main() {
  final list = [1, 2, 3, 4];
  final sum = list.sum;
  print(sum); // affiche 10
}

Si la liste est vide, .sum renvoie 0.

Vous pourriez également être intéressé par list.average...

30voto

mdakin Points 1192

Je pense toujours que c'est plus propre et plus facile à comprendre pour ce problème particulier.

num sum = 0;
[1, 2, 3].forEach((num e){sum += e;});
print(sum);

ou

num sum = 0;
for (num e in [1,2,3]) {
  sum += e;
}

10voto

Lars Tackmann Points 7448

Il n'y a pas de moyen propre de le faire en utilisant les bibliothèques de base telles qu'elles sont maintenant, mais si vous créez votre propre foldLeft, alors il y en a

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;
}

J'ai parlé à l'équipe Dart de l'ajout de foldLeft aux collections de base et j'espère qu'il sera bientôt disponible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X