【发布时间】: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<>(也就是动态数组) -
是的,这是一个链接列表,因为我不能使用内置。
-
必须是链表吗?
-
所以它很简单...您遍历列表并查找大于您要插入的元素的第一个元素。您在该元素之前插入元素。您必须处理在最后一个元素之后插入、第一个元素插入(绝对是第一个元素,因此使用空列表)和在第一个元素之前插入(列表中已经有一个元素,插入另一个元素)的特殊情况在第一个元素之前)。
-
或者你可以作弊,并使用两个始终存在但在枚举时被跳过的特殊元素。就像门挡一样。这样您就不必处理任何特殊情况,因为您插入的任何元素都将位于这两个元素之间。
标签: c# string list insert sorted