具有int属性的对象列表与Int

时间:2015-09-28 16:11:47

标签: c# .net list

我有2个清单。首先是具有int属性ID的对象列表。另一个是整数列表。

我需要比较这两个列表并将对象复制到一个新列表,其中只有基于ID的两个列表之间匹配的对象。现在我使用2个foreach循环如下:

var matched = new list<Cars>();
foreach(var car in cars)
foreach(var i in intList)
{
 if (car.id == i) 
  matched.Add(car);
}

这似乎会非常缓慢,因为它会多次迭代每个列表。有没有办法这样做而不使用这样的2个foreach循环?

2 个答案:

答案 0 :(得分:8)

一种缓慢但清晰的方式是

var matched = cars.Where(car => intList.Contains(car.id)).ToList();

您可以将intList转换为字典并改为使用ContainsKey来更快地完成此操作。

var intLookup = intList.ToDictionary(k => k);
var matched = cars.Where(car => intLookup.ContainsKey(car.id)).ToList();

更好的是HashSet

var intHash = new HashSet(intList);
var matched = cars.Where(car => intHash.Contains(car.id)).ToList();

答案 1 :(得分:1)

您可以尝试一些简单的linq这样的事情:

var matched = cars.Where(w => intList.Contains(w.id)).ToList(); 

这将获取您的汽车列表,然后仅查找您的intList中包含id的项目。

相关问题