Пересечение между наборами, содержащими переменные разных типов - PullRequest
1 голос
/ 15 апреля 2010

Предположим, у нас есть две коллекции:

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, но разные X и Y. Есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 15 апреля 2010

Не могли бы вы просто сделать

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

3 голосов
/ 15 апреля 2010
HashSet<double> values = ...;
IEnumerable<SomePoint> points = ...;

var result = points.Where(point => values.Contains(point.Z));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...