2010-04-15 61 views
1

假设我们有两个集合:包含不同类型变量的集合之间的交集

List<double> values 
List<SomePoint> points 

其中SomePoint是包含该点的三个坐标的类型:

SomePoint 
{ 
double X; 
double Y; 
double Z; 
} 

现在,我想执行这两个集合之间的交集来查找对于points中的点z坐标是values

的元素之一eqal我创建了类似的东西:

HashSet<double> hash = new HashSet<double>(points.Select(p=>p.Z)); 
hash.IntersectWith(values); 
var result = new List<SomePoints>(); 
foreach(var h in hash) 
    result.Add(points.Find(p => p.Z == h)); 

但它不会返回这些具有相同Z值的点,但不同的XY。有没有更好的方法呢?

回答

3
HashSet<double> values = ...; 
IEnumerable<SomePoint> points = ...; 

var result = points.Where(point => values.Contains(point.Z)); 
+0

谢谢!很棒! – Gacek 2010-04-15 16:46:02

4

你能不能只是做

var query = (from d in values 
      join p in points 
      on d equals p.Z 
      select p).ToList();