我想知道如何更改SortedSet确定两个对象是否相等的方式。
我有一个SortedSet<Tuple<Edge, int>>(new Helpers.EdgeDistanceComparer())
,比较器方法是:
public class EdgeDistanceComparer : IComparer<Tuple<Edge,int>>
{
public int Compare(Tuple<Edge, int> x, Tuple<Edge, int> y)
{
return Comparer.Default.Compare(x.Item2, y.Item2);
}
}
我认为这是因为Sorted Set只比较整数(Tuple.Item2),如何在Edge类上进行比较?
编辑
为了更好地解释问题:
我想通过Edge类比较项目,并按Tuple.Item2对它们进行排序,如果两个Tuple.Item2相等,则无论如何都要将该项目添加到SortedSet中。
第二次编辑
Ben给出了一个很好的答案,但最终我决定向我的类添加一个属性,以便我保存在Tuple.Item2中的值现在保存在我的Edge类的属性中。然后,我实现了IComparable接口,这是我的Edge类的样子:
public class Edge : IComparable
{
public Coordinate Coordinates { get; set; }
public string Value { get; set; }
public Edge Parent { get; set; }
public int Cost { get; set; }
public int CompareTo(object obj)
{
var thatEdge = (Edge) obj;
if (Cost > thatEdge.Cost)
{
return 1;
}
if (Cost < thatEdge.Cost)
{
return -1;
}
// cost may be same but coordinates must be different
if (Cost == thatEdge.Cost &&
(Coordinates.X != thatEdge.Coordinates.X || Coordinates.Y != thatEdge.Coordinates.Y))
{
return -1;
}
return 0;
}
}
SortedSet的IComparer:
public class EdgeDistanceComparer : IComparer<Edge>
{
public int Compare(Edge x, Edge y)
{
return Comparer.Default.Compare(x, y);
}
}