繁体   English   中英

排序通用链表

[英]Sorting generic linked list

除了排序之外,我已经完成了通用链接列表中的所有操作。 而且我不知道如何使用IComparable或者我将如何使用它,因为它是通用的。 我不知道我甚至会比较或排序?

public class Node<T> : IComparable<T>
{
    private Node<T> next;
    private T item;

}

所以

public int CompareTo( T other )
{
    // TODO: Find out how to do it properly
    throw new NotImplementedException();
}

它也反对将它转换为数组然后对其进行排序然后将其转换回来的指令。

拥有链接列表Node对象实现IComparable对于您描述的确切原因完全没有意义。 相反,您在链表中使用的类应该实现它。 实际上,您可以使用泛型类型约束来要求:

MyClass<T> where T : IComparable<T> {}

完成后,您可以在执行排序时使用T ,就好像它 IComparable一样。

你应该做的第一件事是阅读排序算法并决定你将使用哪一个。 完成后,您可以担心比较通用值。

如果您想遵循框架方法,请不要让您的T实现IComparable<T>. 而是使用Comparer<T>.Default 这种方法允许您编写类以支持用户定义的比较:

public class LinkedList<T>
{
    public void Sort() { this.Sort(Comparer<T>.Default); }
    public void Sort(IComparer<T> comparer)
    {
        //todo: implement
        throw new NotImplementedException();
    }
}

我的这个答案的初始版本将比较器作为类的属性,但这确实是不正确的,因为链表不是固有的排序类型。 您可能希望以一种方式对列表进行排序,然后在2秒后以不同的方式对其进行排序。 因此,比较器应该是sort方法的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM