flutter/如何按月/周对日期时间列表进行分组



我正在尝试从列表中创建一些支出图表,并想知道如何按月/周对数据进行分组。

输入:

List<Expense>;
Expense({
required this.dateTime,
required this.amount,
});

我想要实现的输出:

[
//December
[
Expense1,
Expense2,
Expense3,
etc
],
//November
[
Expense4,
Expense5,
Expense6,
etc
], 
//October
...
],

我怎么能在几个星期内得到同样的结果?

[
//This week
[
//Monday
[
Expense1,
Expense2,
Expense3,
etc
],
//Tuesday
[
Expense4,
Expense5,
Expense6,
etc
],
....
],
//Previous week
....
],

谢谢!

试试这个:

List<Expense> expenses;
Map<String,List<Expense>> sortedExpenses;
for(int i=1;i<=12;i++){
List<Expense> newExpenses;
expenses.forEach(var expense){
if(expense.dateTime.month==i){
newExpenses.add(expense);
}
}
sortedExpenses[i]=newExpenses;
}

我找到了解决方案:

Map<int, Map<int, List<Expense>>> groupExpensesByWeek() {
var finalList = Map<int, Map<int, List<Expense>>>();
var weeksList = groupBy(_expenses!, (Expense obj) => weekNumber(obj.dateTime)); //group the expenses by weeks
weeksList.forEach((key, value) {
var listofWeeks = groupBy(value, (Expense obj) => obj.dateTime.weekday); //group the expenses by days
finalList.addEntries([MapEntry(key, listofWeeks)]); //add map of days to weeks map
});
return finalList;
}
Map<int, List<Expense>> groupExpensesByMonth() {
var monthList = groupBy(_expenses!,
(Expense obj) => int.parse('${obj.dateTime.year}${obj.dateTime.month}')); //group the expenses by year+month: 202210
return monthList;
}

最新更新