如何将List转换为Map of List



我有一个包含这些数据的列表,我想在Map<DateTime,>作为事件变量(_id, title, date, active),以下是我恢复的数据示例:

[
{
"_id":8,
"title":"Matin",
"date":"2021-08-04T00:00:00.000Z",
"active":1
},
{
"_id":9,
"title":"Après-midi",
"date":"2021-08-04T12:00:00.000Z",
"active":1
},
{
"_id":11,
"title":"Matin",
"date":"2021-08-05T00:00:00.000Z",
"active":1
},
{
"_id":12,
"title":"Après-midi",
"date":"2021-08-05T12:00:00.000Z",
"active":1
},
{
"_id":6,
"title":"Matin",
"date":"2021-08-11T00:00:00.000Z",
"active":1
},
{
"_id":7,
"title":"Après-midi",
"date":"2021-08-11T12:00:00.000Z",
"active":1
},
{
"_id":4,
"title":"Matin",
"date":"2021-08-17T00:00:00.000Z",
"active":1
},
{
"_id":10,
"title":"Matin",
"date":"2021-08-17T00:00:00.000Z",
"active":1
}
]

在每个值中,我都有一个日期,包括年、月、日和时间,我想在不考虑小时的情况下对日期进行分组,如下所示:

"2021-08-04": [
{
"_id":8,
"title":"Matin",
"date":"2021-08-04T00:00:00.000Z",
"active":1
},
{
"_id":9,
"title":"Après-midi",
"date":"2021-08-04T12:00:00.000Z",
"active":1
}
],
"2021-08-05": [
[
{
"_id":11,
"title":"Matin",
"date":"2021-08-05T00:00:00.000Z",
"active":1
},
{
"_id":12,
"title":"Après-midi",
"date":"2021-08-05T12:00:00.000Z",
"active":1
}
]

我尝试做一些与Map.fromIterable,但我有一些错误…如果有人能帮助我,谢谢!

我强制使用您需要的解决方案类型。如果存储的日期格式不变,则提供的解决方案将肯定有效。

void converter(var data) {
var req={};
for (int i = 0; i < data.length; i++) {
var date=data[i]["date"].toString().substring(0,10);
if(!req.containsKey(date))
req[date]=[];
req[date].add(data[i]);
}
print(req);
}

当你使用flutter时,有一个包可以处理这些东西。https://pub.dev/packages/collection

你将需要groupby。

我做了类似的事情,不知道API是否仍然相同。无论如何,下面是代码片段。

.map(
(List<Appointment> appointments) {
appointments.sort(
(Appointment a, Appointment b) {
if (a.appointmentdate
.difference(b.appointmentdate)
.isNegative) return -1;
return 1;
},
);
return appointments;
},
).distinct();

考虑到data是您列出的List<Map<String, Object>>变量,即假设您的数据不是JSON对象,我会这样做:

Map<String, List<Map<String,Object>>> myTfData = {}
data.forEach(
(value) {
var myDate = value['date'] as String;
if(myTfData.containsKey(myDate)) myTfData[myDate] = [];
myTfData[myDate]!.add(value);
}
);

您将获得一个Map<String, List<Map<String,Object>>>对象。

相关内容

最新更新