必须至少有一个对象实现IComparable.排序集合C#
本文关键字:IComparable 排序 集合 实现 一个对象 | 更新日期: 2023-09-27 18:27:03
在c#中,当使用已排序的集合数据结构并使用ICompare对集合进行排序时一个特定的值插入或添加有效,但当试图获得集合中的最小值时,会引发一个异常我的代码
class priorityqueue
{
public SortedSet<NODE> opendList;
private class SortAccordingToTotal : IComparer<NODE>
{
public int Compare(NODE a, NODE b)
{
return a.TOTAL.CompareTo(b.TOTAL);
}
}
public priorityqueue()
{
opendList = new SortedSet<NODE>(new SortAccordingToTotal());
}
public void Push (NODE N)
{
opendList.Add(N);
}
public bool search(NODE N)
{
return opendList.Contains(N);
}
public NODE POP()
{
NODE TEMP = new NODE();
TEMP = opendList.Min();
opendList.Remove(TEMP);
return TEMP;
}
}
扩展@Claudiu Georgiu的注释,SortedSet
的Min
属性应该利用您的自定义比较器。但是,您当前可能使用的Min()
扩展方法要求NODE
类实现IComparable<T>
或IComparable
接口。如果您切换到调用属性,它应该可以工作。
您的问题很模糊,但听起来您的NODE类需要实现IComparable接口。幸运的是,这样做很容易。
public class NODE: IComparable
{
public int total{ get; set; }
public int CompareTo(object obj)
{
if (obj == null) return 1;
var otherNode = obj as Hobby;
return this.total.CompareTo(otherNode.total);
}
}