#dart #nested-lists
#dart #вложенные списки
Вопрос:
Допустим, у меня есть список объектов date. Я хотел бы разделить их на новый список по месяцам, и этот список будет добавлен в другой список. Который в конечном итоге станет List<List<DateTime>>
.
{
[2020-12-25],
[2020-12-25],
[2020-11-24],
[2020-10-23]
}
to
[
[2020-12-25,2020-12-25],
[2020-11-24],
[2020-10-23]
]
Что я пробовал в песочнице
void test(List<DateTime> datelist) {
List<List<DateTime> mainList = [];
datelist.forEach((date){
if(mainlist.isEmpty == true) {
List<DateTime> temp = [];
temp.add(date);
mainList.add(temp);
} else {
mainList.forEach((monthList) {
if(monthList.first.month == date.month) {
monthList.add(date);
} else {
List<DateTime> temp = [];
temp.add(date);
mainList.add(temp);
}
});
}
});
}
Но ошибка: Uncaught Error: concurrent modification during iteration: Instance of 'JSArray<List<DateTime>>
.
Комментарии:
1. Ваши данные выглядят так, как будто вы группируете по дате, а не по месяцу. Что вы хотите?
2. @RandalSchwartz черт, виноват. Я хотел по месяцам. спасибо, что указали.
Ответ №1:
Что-то вроде этого должно работать:
void main() async {
var dates = <DateTime>[
DateTime(2020, 12, 25),
DateTime(2020, 12, 25),
DateTime(2020, 11, 24),
DateTime(2020, 10, 23)];
var monthMap = Map<int, List<DateTime>>();
for (final date in dates) {
var list = monthMap[date.month];
if (list == null) {
list = [date];
monthMap[date.month] = list;
} else {
list.add(date);
}
}
List<List<DateTime>> mainList = monthMap.values.toList();
print("[" mainList.map((e) {
return "[${e.map((d) => "${d.year}-${d.month}-${d.day}").join(", ")}]";
}).join(", ") "]");
}