class Program
{
static void Main(string[] args)
{
IEnumerable<View> views = new List<View>
{
new View() {CoordSys = new Plane(){Org=new Origin(){x=1,Vector=0}}, PartNums = new List<int> {1,2,3}}
,new View() {CoordSys = new Plane(){Org=new Origin(){x=2,Vector=0}}, PartNums = new List<int> {4,5,6}}
,new View() {CoordSys = new Plane(){Org=new Origin(){x=3,Vector=0}}, PartNums = new List<int> {13,14,15}}
,new View() {CoordSys = new Plane(){Org=new Origin(){x=2,Vector=0}}, PartNums = new List<int> {7,8,9}}
,new View() {CoordSys = new Plane(){Org=new Origin(){x=2,Vector=0}}, PartNums = new List<int> {10,11,12}}
,new View() {CoordSys = new Plane(){Org=new Origin(){x=1,Vector=0}}, PartNums = new List<int> {16,17,18}}
};
IEnumerable<View> viewsByGroup = views.GroupBy(v => v, new ViewComparer());
// loop to process groups
Console.ReadLine();
}
}
class ViewComparer : IEqualityComparer<View>
{
public bool Equals(View x, View y)
{
return x.CoordSys.Org.x == y.CoordSys.Org.x
&& x.CoordSys.Org.Vector == y.CoordSys.Org.Vector;
}
public int GetHashCode(View obj)
{
return obj.CoordSys.GetHashCode();
}
}
Как написать сравнение groupBy? Я хочу, чтобы группы, где CoordSys равны. Это моя первая попытка написать пользовательскую группуBy. В этом примере кода есть много возможностей, чтобы сделать его простым. Фактический CoordSys более сложный.написать письмо Linq groupBy
Спасибо за те, кто ответил, к сожалению, мне нужно написать мой компаратор, потому что мое свойство CoordSys намного сложнее, чем int, показанное мной в моем примере. Я попытался упростить проблему, которая могла ввести вас в заблуждение. Мой CoordSys фактически состоит из плоскости, начала координат и вектора, нормального к плоскости. Все это нужно учитывать в моем окончательном решении для сравнения. Спасибо – DustyB