包含不同类型变量的集合之间的交集

时间:2010-04-15 16:35:28

标签: c# collections

假设我们有两个集合:

List<double> values
List<SomePoint> points

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

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

现在,我想执行这两个集合之间的交集,以找出points z坐标中的哪些点与values的其中一个元素相等。

我创造了类似的东西:

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不同的点。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:4)

你能不能做到

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

答案 1 :(得分:3)

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

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