Home > database >  Dart, compare two lists and return element from first list that does not exist in second list
Dart, compare two lists and return element from first list that does not exist in second list

Time:02-28

I have two lists,

List first = [{'name':'ABC','serialNumber':'ABC-124-353'},
{'name':'XYZ','serialNumber':'XYZ-123-567'},
{'name':'GRE', 'serialNumber': 'GRE-290-128'}];

List second = [{'name':'PQR','serialNumber':'PQR-D123-SII23'},{'name':'GAR','serialNumber':'GAR-G43-432'},
{'name':'MNOP','serialNumber':'XYZ-123-567'}];

Is there any easier way to compare first list and second list by serialNumber. such that element from first list that doesn't exist in second list are outputted as a result.

So in this case

[{'name':'ABC','serialNumber':'ABC-124-353'},{'name':'GRE', 'serialNumber': 'GRE-290-128'}]

from first list is desired output, because ABC-124-353 and GRE-290-128 doesn't exist in list second

CodePudding user response:

I'd make a set of the serial numbers of the second list, so that you can do efficient contains checks. So:

var secondListSerials = {for (var entry in secondList) entry["serialNumber"]};
var firstListOnly = [for (var entry in firstList) 
  if (!secondListSerials.contains(entry["serialNumber"]) entry
];

CodePudding user response:

Another solution would be to use where on your first List to check if the serialNumber is contained in the second list:

final secondSerials = second.map((item) => item['serialNumber']).toSet();
print(first.where((item) => !secondSerials.contains(item['serialNumber'])).toList());
  •  Tags:  
  • dart
  • Related