列表中的颤振和值

  • 本文关键字:列表 flutter
  • 更新时间 :
  • 英文 :


同月份的值如何求和?

我有这个列表从实时数据库:

I/flutter (10602): {Valor: 10, Date: 2021-Jan-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 20, Date: 2021-Feb-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 30, Date: 2021-Mar-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 5, Date: 2021-Abr-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 8, Date: 2021-Mai-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 10, Date: 2021-Jun-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 15, Date: 2021-Jul-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 23, Date: 2021-Aug-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 43, Date: 2021-Aug-31, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 33, Date: 2021-Set-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 22, Date: 2021-Out-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 10, Date: 2021-Nov-20, IndicadorRef: Filmes}
I/flutter (10602): {Valor: 2, Date: 2021-Dez-20, IndicadorRef: Filmes}

我想对具有相同月份的值求和,比如八月

这是我可以得到这个列表的地方:

getData() async {
_database.child("Dados").onValue.listen((event) {
dataValues.clear();
temporaryDataValues.clear();
finalDataValues.clear();
var keys = event.snapshot.value.keys;
var values = event.snapshot.value;
for (var key in keys) {
Data data = new Data(
values[key]["Valor"],
values[key]["Date"],
values[key]["IndicadorRef"],
);

if (data.indicadorRef == AreaScreen.indicadores[AreaScreen.indicadorIndex].name) {
print(data.toJson().toString());
dataValues.add(data);
temporaryDataValues.add(data.valor);
}
}

我不确定我理解这个问题,但我假设Data是您定义的一个类,它将值存储为int,日期存储为DateTime,而indicadorRef存储为其他东西?

如果是这样,为了创建一个包含所有数据的列表,你可以这样做:

List<Data> data = keys.map((key) => Data(
values[key]["Valor"],
values[key]["Date"],
values[key]["IndicadorRef"], // I'd make these named parameters if I were you
)).toList(); 

然后获取给定月份的所有值:

int month = DateTime.april // whatever month you want
//int month = DateTime.now().month; // in case you want the current month
List<Data> sameMonth = data.where((current) => current.date.month == month).toList();

最后添加所有值:

int value = sameMonth.fold<int>(0, (prev, curr) => pre+curr.valor);

如果你想同时做所有这些:

int value = keys.map((key) => Data(
values[key]["Valor"],
values[key]["Date"],
values[key]["IndicadorRef"],
))
.where((current) => current.date.month == month)
.fold<int>(0, (prev, curr) => prev + curr.valor);

我希望我已经回答了你的问题

最新更新