Dart リスト(配列)の各値の演算結果を蓄積する
Dartで、リスト(配列)の各値の演算結果を蓄積するコードを記述してます。「reduce」を使用します。値が1つしかないリストに使用すると、そのまま値が返ります。また空のリストに使用するとエラーとなります。
環境
- OS windows11 home
- Dart 2.18.4
各値の演算結果を蓄積
各値の演算結果を蓄積するには「 reduce 」を使用します。
リスト.reduce((accumulator,currentValue))
accumulator : コールバック関数の結果を累積する
currentValue : 処理されている配列の値
実際に、使用してリストの合計を取得してみます。
void main() {
var list = [1, 2, 3, 4, 5];
print(list.reduce((acc, curr) => acc + curr)); // 15
}
実行結果を見ると、合計が計算されていることが確認できます。
文字列のリストに使用して、全ての値を結合することもできます。
void main() {
var list = ['a', 'b', 'c'];
print(list.reduce((acc, curr) => acc + curr)); // abc
}
値が1つしかない場合
値が1つしかないものは、値がそのまま返ります。
void main() {
var list = ['a'];
print(list.reduce((acc, curr) => acc + curr)); // a
}
なので、例えば条件を指定した場合などは期待される結果が返りません。
void main() {
var list = [5];
print(list.reduce((acc, currentValue) =>
(2 < currentValue) ? acc * 10 : acc + currentValue
)); // 5
}
fold
foldを使用すると初期値が設定できるので、値が1つしかない場合は「fold」を使用すれば解決します。
void main() {
var list = [5];
print(list.fold<int>(5,(acc, currentValue) =>
(2 < currentValue) ? acc * 10 : acc + currentValue
)); //50
}
「fold」は以下のように、初期値が設定されます。
void main() {
var list = [1, 2, 3, 4, 5];
print(list.fold<int>(10,(acc, currentValue) =>
acc + currentValue
)); //25
}
空のリスト(配列)
空のリスト(配列)に使用すると、エラーとなります。
void main() {
var list = [];
print(list.reduce((acc, curr) => acc + curr));
}
Unhandled exception:
Bad state: No element
#0 ListMixin.reduce (dart:collection/list.dart:222:22)
#1 main (file:///c:/sample/main.dart:4:14)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
-
前の記事
WinSCP ファイルのパーミッション値でソートするショートカットキー 2023.12.03
-
次の記事
mac コマンドでディレクトリを削除する 2023.12.04
コメントを書く