Ich habe eine solche Klasse:GetHashCode für eine Klasse mit einer Liste Objekt
public class Cycle
{
public List<int> Edges
{
get;
private set;
}
public override bool Equals(object obj)
{
Cycle cycle = (Cycle)obj;
var list1 = cycle.Edges;
var list2 = Edges;
var same = list1.Except(list2).Count() == 0 &&
list2.Except(list1).Count() == 0;
return same;
}
public override int GetHashCode()
{
// return Edges.GetHashCode();
}
}
Wie Sie sehen können, wenn zwei Edge
Listen gleich sind, dann halte ich die Cycles
als die gleiche.
Das Problem ist jetzt, wie Sie die GetHashCode()
implementieren?
Ich versuchte Edges.GetHashCode()
, aber das Problem ist, dass zwei List<Cycle>
, mit den gleichen Cycle
Objekt aber unterschiedlichen Aufträgen, anders angesehen werden, auch wenn sie das gleiche sein sollen.
"Außer" ist eine Set-Operation, die Ihnen nur die einzelnen Elemente gibt. Wenn verschiedene Elemente alles sind, was zählt, dann ist die Verwendung von 'HashSet' eine bessere Wahl. Es hat 'HashSet .CreateSetComparer', das alles kostenlos macht. In jedem Fall, wenn Sie die einzelnen Elemente nur für die Gleichheit vergleichen möchten, ist '! Any' leistungsfähiger als 'Count == 0'. Wie '! List1.Except (list2) .Any() && ! List2.Except (list1) .Any();'. –
nawfal