Dart/Flutter -比较两个List< dynamic>是否具有相同的id值

cnwbcb6i  于 11个月前  发布在  Flutter
关注(0)|答案(2)|浏览(218)

我有两个List<dynamic>,我试图弄清楚如何检查id字段中是否有相同的值

List list1 = [
  {"id": 2, "name": "test1"},
  {"id": 3, "name": "test3"}
];

List list2 = [
  {"id": 2, "name": "test1"}
];

字符集
我试过了,但它返回false

var isMatch = (list1.toSet().intersection(list2.toSet()).length > 0);

8cdiaqws

8cdiaqws1#

你可以比较动力学。这很简单。

dynamic a = 0;
dynamic b = 1;
a.compareTo(b);

字符集
然而,这只在a有一个函数compareTo时才有效。所有的原语都有这个函数,所以没有问题。如果你有自定义类,那么你应该自己写一个函数compareTo
此外,b必须与a是同一个对象。因此,首先检查if (a.runtimeType == b.runtimeType)是一个很好的做法。在您的情况下,这显然是正确的。

cbjzeqam

cbjzeqam2#

你不能像那样比较,因为你不能像Boken说的那样比较动态,你需要为你的对象创建一个类并实现一个基本的搜索,你可以将list2转换为一个集合,以使搜索不那么复杂(包含函数)

void main() {
  List list1 = [
  MyObject(2,"test"),
  MyObject(3,"test1")
];

List list2 = [
  MyObject(4,"test")
];
  
  
  for(int i=0;i<list1.length;i++){
    
    if(list2.contains(list1[i])){
      // do your logic
      print(true);
      break;
    }
    
  }
  
}

class MyObject{
  
  int id;
  String name;
  
  MyObject(int id,String name){
    this.id = id;
    this.name = name;
  }
  
  // redifine == operator
  bool operator ==(o) => (o as MyObject).id == this.id;
  
  
}

字符集

相关问题