Dart 将无序列表与对象进行比较

max*_*max 5 compare list dart flutter

我有以下问题。有两个包含文章的列表。在下面的示例中,结果打印false。但文章都是一样的。我认为是这样,因为这些是不同的对象,如果我在两个列表中添加article1,它将是true

我还从这个问题中尝试了 DeepCollectionEquality.unordered().equals: How can I Compare Lists for equality in Dart?

但它也给了我错误的回报。在我的实际项目中,我有两个包含文章的列表。这些列表没有排序,因此一篇文章可以是一个列表中的第一篇,而具有相同 id 和名称的文章可以是另一个列表中的最后一篇。但如果两个列表具有相同的文章(具有相同的名称和 ID),则结果应为 true。

var a = List<Article>();
var b = List<Article>();

var article1 = Article(id: "1", name: "Beer");
var article2 = Article(id: "1", name: "Beer");

a.add(article1);
b.add(article2);

print(listEquals(a, b));
Run Code Online (Sandbox Code Playgroud)

die*_*per 4

正如您所说,这些是不同的对象,您需要重写类的等于运算符,如下所示:

class Article {
  final String name;
  final String id;
  const Article({this.id,this.name});

  @override
  bool operator ==(Object other) =>
    identical(this, other) ||
    other is Article &&
    runtimeType == other.runtimeType &&
    id == other.id;

  @override
  int get hashCode => id.hashCode;
}
Run Code Online (Sandbox Code Playgroud)

那么结果就是true,因为id是相同的。

您也可以看看这个包

https://pub.dev/packages/equatable