首页 > 解决方案 > 获取 2 张地图颤动之间的差异

问题描述

我有 2 张地图,我想将缺失的元素作为列表获取。例如:

var map1= [
   {"name":"name1","email":"name1@email.com"},
   {"name":"name2","email":"name2@email.com"},
   {"name":"name3","email":"name3@email.com"},
 ];
   var map2= [
   {"name":"name1","email":"name1@email.com"},
   {"name":"name2","email":"name2@email.com"},
  
 ];

Output: [{"name":"name3","email":"name3@email.com"}]

我尝试了这种方法:

var removedElements = map2.where((element) => 
                                      !map1
                                          .contains(element['email']))
                                      .toList();

但它不起作用。任何帮助都会很棒。

标签: arrayslistflutterdictionarydart

解决方案


试试这个

void main() {
  var map1 = [
    {"name": "name1", "email": "name1@email.com"},
    {"name": "name2", "email": "name2@email.com"},
    {"name": "name3", "email": "name3@email.com"},
  ];
  var map2 = [
    {"name": "name1", "email": "name1@email.com"},
    {"name": "name2", "email": "name2@email.com"},
  ];

  var removedElements = [];
  var k;
  for (var i in map2) {
    for (var j in map1) {
      if (i["email"] != j["email"]) {
        k = j;
      }
    }
     removedElements.add(k);
  }

  print(removedElements.toSet().toList());
}

另一种方法

 var removedElements =
      map2.where((element) {
       for(var i in map1){
         if(i["email"] == element["email"]){
           return false;
         } else{
           return true;
         }
       }
      }).toList();

  print(removedElements);

输出 :[{名称:name3,电子邮件:name3@email.com}]


推荐阅读