見た目が醜いと思う以外の理由で、インデックス付き配列を使用するのは好きではありません。匿名関数で合計するクリーンな方法はありますか?外部変数を使用せずにそれを行うことは可能ですか?
Dart iterablesにreduce関数( https://code.google.com/p/Dart/issues/detail?id=1649 )が追加されたため、独自のフォールドを定義せずに合計を簡単に実行できます。関数:
var sum = [1, 2, 3].reduce((a, b) => a + b);
int sum = [1, 2, 3].fold(0, (previous, current) => previous + current);
または、変数名を短くして場所を取らないようにします。
int sum = [1, 2, 3].fold(0, (p, c) => p + c);
私はまだ、この特定の問題について、明白な方法がよりクリーンで理解しやすいと思います。
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;
}
現在のようにコアライブラリを使用してそれを行うためのクリーンな方法はありませんが、独自のライブラリをロールする場合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をコアコレクションに追加することについてDartチームと話しましたが、すぐにそこにあることを願っています。
import 'package:queries/collections.Dart';
void main() {
var data = [0, 1, 2, null, 3];
var sum = Collection(data).sum();
print(sum);
}
以下を使用できます。
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
この関数は、一般的なユーティリティファイルで作成することをお勧めします。
T sum<T extends num>(T lhs, T rhs) => lhs + rhs;
int、double、floatはnumクラスを拡張するため、その関数を使用して任意の数値を合計できます。
例えば。、
List<int> a = [1,2,3];
int result = a.reduce(sum);
print(result); // result will be 6