删除Flutter中的重复项目



我有一个列表,用户可以在其中动态添加项目。列表如下:

[{author: Tsubasa Yamaguchi, created: 24 Juin 2017, total_chapter: 34, genre: seinen, pic: https://www.nautiljon.com/images/more/03/72/278427.jpg, title: Blue Period}, {author: Tsubasa Yamaguchi, created: 24 Juin 2017, total_chapter: 34, genre: seinen, pic: https://www.nautiljon.com/images/more/03/72/278427.jpg, title: Blue Period}]

我不希望此列表中有任何重复项,因为我在列表视图中显示项目。我尝试过list.toSet().toList()的方法,但由于某种原因,我得到了相同的结果。我认为这是因为格式或我的项目"{}"。

有什么建议吗?

这就是我获取列表的方式:

FirebaseFirestore firestore = FirebaseFirestore.instance;
List favMangasListTitle = [];
List detailledMangaList = [];
String title = '';
String read_chapter = '';
Future<List> getFavMangas() async {
var value = await firestore.collection("users/${user.uid}/fav_mangas").get();
final favMangasGetter = value.docs.map((doc) => doc.data()).toList();
favMangasListTitle.clear();
detailledMangaList.clear();
for (var i in favMangasGetter) {
title = i['title'];
read_chapter = i['read_chapter'];
favMangasListTitle.add(title);
}
await Future.forEach(favMangasListTitle, (i) async {
final mangas =
await firestore.collection('mangas').where('title', isEqualTo: i).get();
final receivedMangaDetailled =
mangas.docs.map((doc) => doc.data()).toList();
detailledMangaList.addAll(receivedMangaDetailled);
});
var test = detailledMangaList.toSet().toList();
print(test);
return detailledMangaList;
}

对于注释,当title被排定优先级时,您可以创建一组标题,然后创建一个唯一的映射。

final data = [...yourData]
final titles = data.map((e) => e["title"]).toSet();
final result = [];
for (final title in titles) {
final item = data.firstWhere((element) =>
element["title"] == title); // include `orElse` if needed
result.add(item);
}
print(result.toString());

您可以使用收集包并尝试此操作,data就是您的列表:

var grouped = groupBy(data, (Map value) => value['title']);
var result = grouped.entries.map((e) => e.value.first).toList();
print("result = $result");

首先,您将列表中的itmes按其title进行分组,然后在第二行中,我们选择了每组中的第一项,这为我们提供了一个不与name重复的列表。

最新更新