List Dart将无序列表与对象进行比较
我有以下问题。有两个列表,其中包含文章。在下面的示例中,结果打印为false。但是文章是一样的。我认为这是因为这些是不同的对象,如果我把这两个列表都加在第1条中,那将是真的 我还尝试了DeepCollectionQuality.unordered()。此版本中的等于: 但它也给了我虚假的回报。 在我真正的项目中,我有两个列表,其中有文章。这些列表未排序,因此一篇文章可以是一个列表中的第一篇,而具有相同id和名称的文章可以是另一个列表中的最后一篇。但是,如果两个列表都有相同的项目(具有相同的名称和id),则结果应该为trueList Dart将无序列表与对象进行比较,list,flutter,dart,compare,List,Flutter,Dart,Compare,我有以下问题。有两个列表,其中包含文章。在下面的示例中,结果打印为false。但是文章是一样的。我认为这是因为这些是不同的对象,如果我把这两个列表都加在第1条中,那将是真的 我还尝试了DeepCollectionQuality.unordered()。此版本中的等于: 但它也给了我虚假的回报。 在我真正的项目中,我有两个列表,其中有文章。这些列表未排序,因此一篇文章可以是一个列表中的第一篇,而具有相同id和名称的文章可以是另一个列表中的最后一篇。但是,如果两个列表都有相同的项目(具有相同的名称
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));
var a=List();
var b=List();
var Article 1=物品(id:“1”,名称:“啤酒”);
var article2=物品(id:“1”,名称:“啤酒”);
a、 增加(第1条);
b、 增加(第2条);
印刷品(列名(a、b));
正如您所说,这些是不同的对象,您需要重写类的equal运算符,如下所示:
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;
}
那么结果将是真的,因为ID是相同的
你也可以看看这个包裹
作为我的解决方案,我使用了“equalable”包:
为了检查无序列表,我使用deepcollectionquality.unordered().equals而不是listquals
var a = List<Article>();
var b = List<Article>();
var article1 = Article(id: "1", name: "Beer");
var article2 = Article(id: "2", name: "Tequilla");
var article3 = Article(id: "3", name: "VodkaBull");
var article4 = Article(id: "1", name: "Beer");
var article5 = Article(id: "2", name: "Tequilla");
var article6 = Article(id: "3", name: "VodkaBull");
a.add(article1);
a.add(article2);
a.add(article3);
b.add(article4);
b.add(article5);
b.add(article6);
print(listEquals(a, b));
print(DeepCollectionEquality.unordered().equals(a, b));
var a=List();
var b=List();
var Article 1=物品(id:“1”,名称:“啤酒”);
var article2=物品(id:“2”,名称:“龙舌兰”);
var Article 3=物品(id:“3”,名称:“伏特加酒”);
var Article 4=物品(id:“1”,名称:“啤酒”);
var Article 5=物品(id:“2”,名称:“龙舌兰”);
var Article 6=物品(id:“3”,名称:“伏特加酒”);
a、 增加(第1条);
a、 增加(第2条);
a、 增加(第3条);
b、 增加(第4条);
b、 增加(第5条);
b、 增加(第6条);
印刷品(列名(a、b));
打印(deepCollectionQuality.unordered().equals(a,b));
我的文章的代码如下所示:
import 'package:equatable/equatable.dart';
class Article extends Equatable {
String id;
String name;
Article({this.id, this.name});
@override
// TODO: implement props
List<Object> get props => [id, name];
}
import'包:equalable/equalable.dart';
类文章扩展了equalable{
字符串id;
字符串名;
第条({this.id,this.name});
@凌驾
//TODO:实现道具
列表获取道具=>[id,name];
}
谢谢,我将使用“Equalable”软件包。更舒适:)