【问题标题】:C# Sorted list without LINQ and SORT没有 LINQ 和 SORT 的 C# 排序列表
【发布时间】:2015-05-14 11:28:32
【问题描述】:

我的问题是,是否可以创建一个列表,在将这些对象放入其中时对其进行排序?

一无所获后,我做了一个新的链表。唯一的任务是使这个列表按其将包含的对象的字符串字段排序,同时保持可访问性。

我有以下代码:

class LancoltLista<T> : IEnumerable
{
    class ListaElem
    {
        public T tartalom;
        public ListaElem kovetkezo;
    }
    ListaElem fej;
    public void ElejereBeszuras(T elem)
    {
        ListaElem uj = new ListaElem();
        uj.tartalom = elem;
        uj.kovetkezo = fej;
        fej = uj;
    }

    public void VegereBeszuras(T elem)
    {
        if (fej == null)
        {
            ElejereBeszuras(elem);
        }
        else
        {
            ListaElem e = fej;
            while (e.kovetkezo != null)
            {
                e = e.kovetkezo;
            }
            ListaElem uj = new ListaElem();
            uj.tartalom = elem;
            e.kovetkezo = uj;
        }
    }

    public IEnumerator GetEnumerator()
    {
        return new ListaBejaro(fej);
    }

    class ListaBejaro : IEnumerator<T>
    {
        ListaElem elso, jelenlegi;

        public ListaBejaro(ListaElem elso)
        {
            this.elso = elso;
            jelenlegi = null;
        }


        public bool MoveNext()
        {
            if (jelenlegi == null)
            {
                jelenlegi = elso;
            }
            else
            {
                jelenlegi = jelenlegi.kovetkezo;
            }
            return jelenlegi != null;
        }

        public void Reset()
        {
            jelenlegi = null;
        }

        object IEnumerator.Current
        {
            get { return this.jelenlegi.tartalom; }
        }

        public T Current
        {
            get { return this.jelenlegi.tartalom; }
        }

        public void Dispose()
        {
            elso = null;
            jelenlegi = null;
        }
    }
}

这里的问题是我无法比较 p.kulcs 和 kulcs。

【问题讨论】:

  • 你的好像是一个链表,而不是C#List&lt;&gt;(也就是动态数组)
  • 是的,这是一个链接列表,因为我不能使用内置。
  • 必须是链表吗?
  • 所以它很简单...您遍历列表并查找大于您要插入的元素的第一个元素。您在该元素之前插入元素。您必须处理在最后一个元素之后插入、第一个元素插入(绝对是第一个元素,因此使用空列表)和在第一个元素之前插入(列表中已经有一个元素,插入另一个元素)的特殊情况在第一个元素之前)。
  • 或者你可以作弊,并使用两个始终存在但在枚举时被跳过的特殊元素。就像门挡一样。这样您就不必处理任何特殊情况,因为您插入的任何元素都将位于这两个元素之间。

标签: c# string list insert sorted


【解决方案1】:

对于实际应用程序,您可以使用内置的SortedList&lt;T&gt;

对于您的家庭作业,您必须对照整个列表检查您在 add 方法中获得的每个项目,并将其插入到正确的位置:在它大于或等于的最后一个元素和第一个那么它会更小。
当然,如果列表为空,或者没有比您添加的元素更大的元素,那么您只需将该元素附加到最后一个可用位置。

因为这是作业,我让你自己写代码。

【讨论】:

  • 我不知道如何比较这些字符串。
  • 字符串?这是最简单的部分——您可以简单地执行 stringA.CompareTo(stringB)。您需要担心没有实现IComparable 接口的对象
  • this is how `SortedList 如果您需要灵感,可以使用
  • 我现在不知道如何让这个列表可以枚举
  • 你的意思是你不知道如何实现IEnrumarable?你为什么不在弗兰克提供的链接中检查微软是如何做到的?顺便说一句,只是出于好奇,您使用什么语言作为变量名?
猜你喜欢
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 2022-01-01
  • 1970-01-01
  • 2021-09-06
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多