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();
}
}
Wie schreibe ich den GroupBy Vergleicher? Ich möchte Gruppen, in denen CoordSys gleich ist. Dies ist mein erster Versuch, eine benutzerdefinierte groupBy zu schreiben. Dieser Beispielcode hat viele Ints in dem Versuch, es einfach zu machen. Die tatsächliche CoordSys ist komplexer.Wie schreibe ich benutzerdefinierte Linq groupBy
Danke für diejenigen, die geantwortet haben, leider muss ich meinen Vergleicher schreiben, weil meine CoordSys-Eigenschaft viel komplexer ist als der Int, den ich in meinem Beispiel zeigte. Ich habe versucht, das Problem zu vereinfachen, das Sie in die Irre geführt haben könnte. Mein CoordSys besteht eigentlich aus einer Ebene, einem Ursprung und einem Vektor senkrecht zur Ebene. All dies muss in meiner endgültigen Vergleichslösung berücksichtigt werden. Danke – DustyB