gpt4 book ai didi

flutter - 合并后从List 中删除重复项

转载 作者:行者123 更新时间:2023-12-03 04:53:29 65 4
gpt4 key购买 nike

我想将列表添加到主列表中并删除重复的列表,如下所示:

class item {
int id;
String title;
item({this.id, this.title});
}

void main() {
// this is working for List<int>
List<int> c = [1, 2, 3];
List<int> d = [3, 4, 5];
c.addAll(d..removeWhere((e) => c.contains(e)));
print(c);

// but this is not working for List<item>
List<item> a = new List<item>();
a.add(new item(id: 1, title: 'item1'));
a.add(new item(id: 2, title: 'item2'));

List<item> b = new List<item>();
b.add(new item(id: 2, title: 'item2'));
b.add(new item(id: 3, title: 'item3'));

a.addAll(b..removeWhere((e) => a.contains(e)));
a.forEach((f) => print('${f.id} ${f.title}'));
}

输出是这样的:
[1, 2, 3, 4, 5]
1 item1
2 item2
2 item2
3 item3

当您在 https://dartpad.dev/上测试此代码时, List<int>的输出是可以的,但是 List<item>的输出中有重复项。

最佳答案

第一个列表具有整数值,当您调用包含列表时,它将检查这些值并可以正常工作。

在第二种情况下,您有项目对象。两个列表都具有可能具有相同属性值的对象,但是两者都是两个不同的对象。例如,以下代码将在您的情况下正常工作,因为两个列表中的item2对象相同。

Item item2 = Item(id: 2, title: 'item2');

List<Item> a = new List<Item>();
a.add(new Item(id: 1, title: 'item1'));
a.add(item2);

List<Item> b = new List<Item>();
b.add(item2);
b.add(new Item(id: 3, title: 'item3'));

当您调用contains时,它将使用Object。==方法,因此要处理此问题,您必须重写该方法并指定自己的相等逻辑。
class Item {
int id;
String title;
Item({this.id, this.title});

@override
bool operator == (Object other) {
return
identical(this, other) ||
other is Item &&
runtimeType == other.runtimeType &&
id == other.id;
}
}

或者,您可以使用 equatable包更好地处理它。

引用文献:
  • contains method
  • operator == method
  • 关于flutter - 合并后从List <model>中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60978889/

    65 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com