我有一个列表,用户可以在其中动态添加项目。列表如下:
[{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
重复的列表。