List 省道/颤振-比较两个列表<;动态>;如果它们具有相同的id值

List 省道/颤振-比较两个列表<;动态>;如果它们具有相同的id值,list,flutter,dart,contains,List,Flutter,Dart,Contains,我有两个列表,我正在试图找出如何检查id字段中是否有相同的值 List list1 = [ {"id": 2, "name": "test1"}, {"id": 3, "name": "test3"} ]; List list2 = [ {"id": 2, "name": "test1"} ]; 我试过

我有两个
列表
,我正在试图找出如何检查
id
字段中是否有相同的值

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

List list2 = [
  {"id": 2, "name": "test1"}
];
我试过了,但结果是错误的

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

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

void main(){
列表1=[
MyObject(2,“测试”),
MyObject(3,“测试1”)
];
列表2=[
MyObject(4,“测试”)
];
for(inti=0;i(o作为MyObject).id==this.id;
}

您必须指定。无法比较
动态
,因为它是…动态的。将其转换为列表就足够了?转换为
字符串
(作为json?)不会帮助您进行搜索。您可以尝试将其转换为新类。例如,带有字段
id
name
的类
User
。您可以将其用作
List
哦。这意味着要能够对其进行比较,我需要将其转换为列表,并且它们必须相同?
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;
  
  
}