C# 在每个条目后按名称排序

C# 在每个条目后按名称排序,c#,linq,sorting,C#,Linq,Sorting,我使用此LINQ语句按产品名称(升序)对列表进行排序,其中包含每个产品可用的产品名称(string)和大小(list) 如果列表已经排序,我只需要将最后一个条目放在正确的位置。 最好的方法是什么。同时也降低了算法的复杂度。谢谢您可以使用分类列表 您可以这样添加时间list.add(fullItemDetails.Name,fullItemDetails) [编辑]:添加或删除元素后,顺序将保持不变 [Edit2]使用LINQ 使用列表存储项目(添加/删除):list originalList和其

我使用此LINQ语句按产品名称(升序)对列表进行排序,其中包含每个产品可用的产品名称(
string
)和大小(
list

如果列表已经排序,我只需要将最后一个条目放在正确的位置。
最好的方法是什么。同时也降低了算法的复杂度。谢谢

您可以使用
分类列表

您可以这样添加时间
list.add(fullItemDetails.Name,fullItemDetails)

[编辑]:添加或删除元素后,顺序将保持不变

[Edit2]使用LINQ 使用列表存储项目(添加/删除):
list originalList
和其他属性读取已排序的数据:

IEnumerable<FullItemDetails> sortedList = originalList.OrderBy(e => e.Name).ThenBy(e => /* logic to order by another property*/);
IEnumerable sortedList=originalList.OrderBy(e=>e.Name).ThenBy(e=>/*逻辑按另一个属性排序*);
现在,您可以迭代您的
排序列表
,由于此排序列表是一个
IEnumerable
,因此每次迭代时,您将拥有与
原始列表
中完全相同的元素(添加或删除项目后)

换句话说:
sortedList
只包含读取
原始列表的逻辑

希望这有帮助。
关于。

这似乎是
分类列表的理想问题,因为您有一个键(名称)和值(
列表
用于大小)

文件可在以下位置获得:

列表声明如下所示:
SortedList
。所有插入内容都将按字符串排序,并且可以根据每个键枚举值。

使用
SortedList
SortedSet
代替
List
。您可以传入一个
IComparer
,以使用特定的排序算法

这将导致如下结果:

ICollection<FullItemDetails> _itemList = new SortedSet<FullItemDetails>(new ComparisonComparer<FullItemDetails>((x,y) -> x.ProductName.CompareTo(y.ProductName))
ICollection\u itemList=new SortedSet(new ComparisonComparer((x,y)->x.ProductName.comparieto(y.ProductName))
您的收藏现在将始终被订购


当您使用.NET 4.5时,您可以。

根据您处理的数据集的大小,每次重新排序是否会影响性能?该方法必须比较产品名称以确定顺序,并且您在正确位置插入的操作也会如此。您将有o(N)这种情况下的速度。如果数据集不是很大,我就不会担心它。你是使用
链接列表
还是
列表
?你声明一个
链接列表
,但LINQ返回一个
列表
排序集
可能更合适。工作非常好,谢谢。我读到排序列表使用二进制搜索搜索一个键。复杂性是O(logN)。我假设在正确的位置插入一个条目也是一样的。SortedList插入是O(N)请考虑使用<代码> SortTeSET ,如JeSouthouWin所指出的。两者都是好的,这取决于他需要什么。如果他想要与特定的产品名称相关联的所有大小,SortDead列表可以更好地用于框外功能。与元组相耦合的SortDead也可以适合帐单,甚至连接候选值(Name + size)。。取决于实现,但对于注释SortedSet:)和user…,正如Timothy Shields提到的,插入的最大O复杂性是O(n),因为插入的最坏情况是必须调整列表的大小。然而,当插入到低于容量的列表中时,正如您所指出的,它只是O(logN)。顺便说一句,它不是
SortedList
,而是
SortedList
。Thanx,已修复。这就是为什么我还包括SortedSet。SortedList更像是一个自动字典,而不是一个排序列表。我尝试使用您的方法,但由于每个条目都有一个大小列表,除了名称之外,我还需要存储它们。我如何实现您的大小方法?在这种情况下,我可以使用LINQ提出另一种解决方案(参考我答案中的Edit2)
IEnumerable<FullItemDetails> sortedList = originalList.OrderBy(e => e.Name).ThenBy(e => /* logic to order by another property*/);
ICollection<FullItemDetails> _itemList = new SortedSet<FullItemDetails>(new ComparisonComparer<FullItemDetails>((x,y) -> x.ProductName.CompareTo(y.ProductName))