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 ?
Réponses
Trop de publicités?Si vous prévoyez d'effectuer un certain nombre d'opérations mathématiques sur votre liste, il peut être utile de créer un autre type de liste qui inclut .sum() et d'autres opérations en étendant ListBase. Certaines parties de ceci sont inspirées par cette réponse avec des améliorations de performances provenant de cette réponse.
import 'dart:collection';
import 'dart:core';
class Vector extends ListBase {
List _list;
Vector() : _list = new List();
Vector.fromList(List lst): _list = lst;
void set length(int l) {
this._list.length=l;
}
int get length => _list.length;
num operator [](int index) => _list[index];
void operator []=(int index, num value) {
_list[index]=value;
}
// Bien que ce ne soit pas strictement nécessaire, pour des raisons de performances
// vous devriez implémenter add et addAll.
void add(num value) => _list.add(value);
void addAll(Iterable all) => _list.addAll(all);
num sum() => _list.fold(0.0, (a, b) => a + b) as num;
/// ajoutez ici d'autres fonctions de vecteur supplémentaires comme min, max, mean, factorial, normalize, etc.
}
Et l'utiliser comme ceci:
Vector vec1 = Vector();
vec1.add(1);
print(vec1); // => [1]
vec1.addAll([2,3,4,5]);
print(vec1); // => [1,2,3,4,5]
print(vec1.sum().toString()); // => 15
Vector vec = Vector.fromList([1.0,2.0,3.0,4.0,5.0]); // fonctionne également pour les nombres décimaux.
print(vec.sum().toString()); // => 15
Différentes façons de trouver la somme de tous les éléments de la liste de fléchettes,
Méthode 1: Utilisation d'une boucle : C'est la méthode la plus couramment utilisée. Parcourez la liste à l'aide d'une boucle et ajoutez tous les éléments de la liste à une variable de somme finale. Nous utilisons une boucle for ici :
main(List args) {
var sum = 0;
var given_list = [1, 2, 3, 4, 5];
for (var i = 0; i < given_list.length; i++) {
sum += given_list[i];
}
print("Somme : ${sum}");
}
Méthode 2: Utilisation de forEach : forEach est une autre façon de parcourir une liste. Nous pouvons également utiliser cette méthode pour trouver la somme totale de toutes les valeurs d'une liste de fléchettes. C'est similaire à la méthode ci-dessus. La seule différence est que nous n'avons pas besoin d'initialiser une autre variable i et list.length n'est pas nécessaire.
main(List args) {
var sum = 0;
var given_list = [1, 2, 3, 4, 5];
given_list.forEach((e) => sum += e);
print("Somme : ${sum}");
}
Méthode 3: Utilisation de reduce : La méthode reduce combine tous les éléments d'une liste de manière itérative en une seule valeur à l'aide d'une fonction donnée. Nous pouvons utiliser cette méthode pour trouver la somme de tous les éléments comme ci-dessous :
main(List args) {
var given_list = [1, 2, 3, 4, 5];
var sum = given_list.reduce((value, element) => value + element);
print("Somme : ${sum}");
}
Méthode 4: Utilisation de fold : fold() est similaire à reduce. Il combine tous les éléments d'une liste de manière itérative en une seule valeur à l'aide d'une fonction. Il prend une valeur initiale et calcule la valeur finale en fonction de la valeur précédente.
main(List args) {
var sum = 0;
var given_list = [1,2,3,4,5];
sum = given_list.fold(0, (previous, current) => previous + current);
print("Somme : ${sum}");
}
Pour plus de détails: https://www.codevscolor.com/dart-find-sum-list-elements
extension DoubleArithmeticExtensions sur Iterable {
double get sum => length == 0 ? 0 : reduce((a, b) => a + b);
}
extension IntArithmeticExtensions sur Iterable {
int get sum => length == 0 ? 0 : reduce((a, b) => a + b);
}
Utilisation :
final actual = lineChart.data.lineBarsData[0].spots.map((s) => s.x).sum;
- Réponses précédentes
- Plus de réponses