我需要合并重复的数组
我有这样的数据
var filterData = [{'date': '25, feb', 'data': ['asd','dsa']}, {'date': '25, feb', 'data': ['asd','dsa']}, {'date': '26, feb', 'data': ['asd','dsa']}]我想像[{'date': '25, feb', 'data': ['asd','dsa','asd','dsa']}, {'date': '26, feb', 'data': ['asd','dsa']}]一样过滤它
发布于 2022-02-07 08:37:45
filterData数据类型为List<Map<String, dynamic>>,此dynamic满足String和List<String>。
filterData和结果数据类型=> List<Map<String, dynamic>>
List> + List>
让我们从Map那里获得一个独特的约会。现在我们要创建一个地图,然后我们将转换为列表。
在dartPad上运行。
Map<String, List<String>> result = {};
for (final data in filterData) {
/// assume filterData will never cause null
final String key = data['date'];
final List<String> value = data['data'];
// just append map value
if (result.containsKey(key)) {
result[key] = [...value, ...value];
;
} else {
//init key-value
result.putIfAbsent(key, () => value);
}
}
//* Current State of result: {25, feb: [asd, dsa, asd, dsa], 26, feb: [asd, dsa]}
//convert map to list
List<Map<String, dynamic>> formatedListResult = result.entries
.map(
(e) => {
'date': e.key,
'data': e.value,
},
)
.toList();
print(formatedListResult);发布于 2022-02-07 04:45:47
您可以创建一个模型类,主要用于获取类型安全性和等式检查==。后者是必需的,这样一个集合就可以知道两个对象是相等的。
// Feel free to change the class name
class Datum {
final String date;
final List<String> data;
Datum(this.date, this.data);
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is Datum && runtimeType == other.runtimeType && date == other.date && data == other.data;
@override
int get hashCode => date.hashCode ^ data.hashCode;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
json["date"] as String,
List<String>.from((json["data"] as List).map((x) => '$x')),
);
Map<String, dynamic> toJson() => {
"date": date,
"data": List<dynamic>.from(data.map((x) => x)),
};
}然后您可以使用一个集合,这样它就不会保存重复的对象。通过重写==和hashCode,Set检查两个对象是否相同。
var filterData = {
Datum.fromJson({'date': '25, feb', 'data': ['asd','dsa']}),
Datum.fromJson({'date': '25, feb', 'data': ['asd','dsa']}),
Datum.fromJson({'date': '26, feb', 'data': ['asd','dsa']})
}注意,filterData现在是一个集合,而不是一个列表。
https://stackoverflow.com/questions/71012787
复制相似问题