Допустим, что у меня есть список пользовательских классов «Точка» (я знаю, что есть один в System.Drawing, но позволяет сказать, что мне нужен пользовательский). Теперь этот список может иногда иметь одни и те же точки, так, например, сказать, что настроен так:Поиск отдельных точек в списке (с использованием 2 предикатов)
List<customPoint> myPoints = new List<customPoint>();
myPoints.Add(new customPoint(1,5));
myPoints.Add(new customPoint(1,5));
myPoints.Add(new customPoint(2,3));
myPoints.Add(new customPoint(4,9));
myPoints.Add(new customPoint(8,7));
myPoints.Add(new customPoint(2,3));
А потом мне нужно сделать некоторые расчеты, но мне не нужно дубликатов. Что бы более элегантный способ сделать новый список уникальных точек, чем это:
List<customPoint> uniquePoints = new List<customPoint>();
for(int i; i < myPoints.Count; i++)
{
Boolean foundDuplicate = false;
int tempX = myPoints[i].X;
int tempY = myPoints[i].Y;
for(int j=0; j < uniquePoints.Count; j++)
{
if((tempX == uniquePoints[0].X) && (tempY == uniquePoints[0].Y))
{
foundDuplicate = true;
break;
}
}
if(!foundDuplicate)
{
uniquePoints.Add(myPoints[i]);
}
}
Я знаю, что это грязное дело, но именно поэтому я прошу, если есть более элегантный способ. Я посмотрел на команду Linq «Distinct», но, похоже, она не работает, я думаю, что есть что-то в их экземпляре объектов, которое по-прежнему уникально.
Выполняется ли ваш 'customPo int' class (который должен быть 'CustomPoint', чтобы следовать соглашениям об именах) переопределить' Equals' и 'GetHashCode' соответственно? –
Вот ссылка [Distinct] (http: // stackoverflow.com/questions/998066/linq-distinct-values) к предыдущему обсуждению вместе со ссылкой на документ msdn на разных – user1376713