按项目成员对 SortedSet 进行排序

red*_*nal 3 .net c# collections set

考虑这个类

public class A
{
     float Order
     string Name
     public A(float order, string name)
     {
           Order = order;
           Name = name;
     }
}
Run Code Online (Sandbox Code Playgroud)

如果我将此添加到 a 中SortedSet<A>,它如何知道向哪个成员订购?如果我什至可以首先指定这一点,我将如何指定。我想该集合的最佳性能是在添加时对其进行排序,而不是添加然后通过Sort().

das*_*ght 5

SortedSet<A>将期望您的班级实现IComparable<A>. 或者,您可以提供一个类型的比较器IComparer<A>来对您的类进行外部排序,如下所示:

class ComparerForClassAByOrder : IComparer<A> {
    public int Compare(A left, A right) {
        return Math.Sign(left.Order-right.Order);
    }
}

class ComparerForClassAByName : IComparer<A> {
    public int Compare(A left, A right) {
        return left.Name.CompareTo(right.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用不同的比较器创建两个排序集:

var soredByOrder = new SortedSet<A>(new ComparerForAByOrder());
var soredByName = new SortedSet<A>(new ComparerForAByName());
Run Code Online (Sandbox Code Playgroud)