不正确地排序数组

时间:2013-11-10 20:58:40

标签: c#

我有A班。在这堂课中,我写了一个CompareTo方法,就像那样:

int IComparable.CompareTo(object obj)
{ 
    if (obj == null)
        return -1;
    Invioce inv = obj as Invioce;
    if (inv == null)
        return -1;
    if ((GetInvoiceAmount() < inv.GetInvoiceAmount()))
        return -1;
    return Convert.ToInt32(GetInvoiceAmount() > inv.GetInvoiceAmount());
}

然后我创建了一个包含10个A s(A[] a = new A[10])的数组,并将a[0]设置为随机AArray.sort(a)的结果为:a[0..8]nulla[9]为随机A。我该怎么做才能正确排序数组? (a[0]必须是随机A)。谢谢大家。

1 个答案:

答案 0 :(得分:0)

首先,您可以删除第一个比较(除非您确实需要进行优化比较)。如果as Invoice不是inv类型,则obj会导致Invoice为空。考虑任何可能的性能损失,增加代码可维护性。

其次,您可以利用结果不必为-1,0,1但小于零,零和大于零来表示优先级。在这种情况下,从比较实例中减去实例将产生有效结果。

以下函数将导致任何非发票或空对象之前的实例,否则它将在具有更大发票金额的发票之前。

int IComparable.CompareTo(object obj)
{ 
    Invioce inv = obj as Invioce;
    return (inv == null) ? -1 : GetInvoiceAmount() - inv.GetInvoiceAmount();
}