group列表对象与out使用groupBy插件,如何实现



问题

使用groupBy插件的组列表对象,如何实现

这是输入

List<dynamic> data = [
{"title": "msg1", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"}
];

希望此输出低于

[
{
"date": "1969-07-20 20:18:04Z",
"message": [
{
"title": "msg1",
"message": "hi all",
"date": "1969-07-20 20:18:04Z"
},
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-20 20:18:04Z"
}
]
},
{
"date": "1969-07-21 20:18:04Z",
"message": [
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-21 20:18:04Z"
},
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-21 20:18:04Z"
}
]
},
{
"date": "1969-07-22 20:18:04Z",
"message": [
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-22 20:18:04Z"
},
{
"title": "msg2",
"message": "hi all",
"date": "1969-07-22 20:18:04Z"
}
]
}
]

使用collection插件中的groupBy方法,它会经过一段时间,将List转换为其他列表的原生dart方法是什么

final struct = <String, dynamic>{
{ "product": [ { "name": "cake", "message": "Message1", "time":"2020-06-16" }, { "name": "apple", "message": "Message2", "time": "2020-06-16" }, { "name": "fish", "message": "Message4", "time": "2020-06-15" }, { "name": "toy", "message": "Message5", "time": "2020-06-15" }
] }
};

并添加您需要的

struct["time"] = "2020-06-16";

按照以下步骤操作。

List dataList=[];
var data={ "product": [ { "name": "cake", "message": "Message1", "time":"2020-06-16" }, { "name": "apple", "message": "Message2", "time": "2020-06-16" }, { "name": "fish", "message": "Message4", "time": "2020-06-15" }, { "name": "toy", "message": "Message5", "time": "2020-06-15" }
] };

在init调用中,

dataList.add(data);

打印结果:

[ { "time": "2020-06-16", "product": [ { "name": "cake", "message": "Message1" }, { "name": "apple", "message": "Message2" } ] }, { "time": "2020-06-15", "product": [ { "name": "fish", "message": "Message4' }, { "name": "toy", "message": "Message5" } ]
} ]

请检查此答案,尝试在镖垫中运行

void main() {
List<dynamic> data = [
{"title": "msg1", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"}
];

List<dynamic> convertedData = [];
for (int i = 0; i < data.length; i++) {
if (i == 0) {
convertedData.add({
"date": data[i]["date"],
"message": [data[i]]
});
} else {
bool found = false;
for (int j = 0; j < convertedData.length; j++) {
if (convertedData[j]["date"] == data[i]["date"]) {
convertedData[j]["message"].add(data[i]);
found = true;
break;
}
}
if (!found) {
convertedData.add({
"date": data[i]["date"],
"message": [data[i]]
});
}
}
}
print(convertedData);
}

或使用集合插件


import "package:collection/collection.dart";
main(List<String> args) {
List<dynamic> data = [
{"title": "msg1", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-20 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-21 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"},
{"title": "msg2", "message": "hi all", "date": "1969-07-22 20:18:04Z"}
];
var output = groupBy(data,(element) => element["date"])
.map((key, value) => MapEntry(
key,
{"date": key, "message": value.toList()},
));
print(output.values.toList());
}

最新更新