【问题标题】:Sort columns using SortedList使用 SortedList 对列进行排序
【发布时间】:2018-06-09 01:13:39
【问题描述】:

我有一个包含很多列的表格数据,我需要对其进行多次排序。 例如这些列包含行号、名称、津贴、时间...

1, Peter,   2500,  2
2, Steve,    500,  1
3, Peter,   2500,  1
4, Peter,   2600,  2
5, Peter,   2800,  2

第一次按名称升序排序,结果为:

1, Peter,   2500,  2
3, Peter,   2500,  1
4, Peter,   2600,  2
5, Peter,   2800,  2
2, Steve,    500,  1

2nd 按余量降序排序,结果为:

5, Peter,   2800,  2
4, Peter,   2600,  2
1, Peter,   2500,  2
3, Peter,   2500,  1
2, Steve,    500,  1

3rd 按次升序排序,结果为:

5, Peter,   2800,  2
4, Peter,   2600,  2
3, Peter,   2500,  1
1, Peter,   2500,  2
2, Steve,    500,  1

由于某种原因,我们使用 SortedList 进行第一次排序,使用 IComparer 将项目添加到 SortedList 以允许重复键。 第一次按名称升序排序后,sortedList 为:

["Peter"] | 1
["Peter"] | 3
["Peter"] | 4
["Peter"] | 5
["Steve"] | 2

第一次排序已经完成,但是如何根据这个“主”排序列表进行第二次和第三次排序? 我的想法是第二类发生在具有相同密钥的邻居中,例如“彼得”。意味着只需要对第 1、3、4、5 行重新排序即可进行第二次排序。 但我想不出最好的办法。

【问题讨论】:

  • 请点击此链接Here
  • 我必须使用 SortedList。旧版本使用 SortedList 进行第一次排序。我需要添加多种新功能。
  • 请为您的IComparer 提供代码;)
  • @zcui93 2nd Sort 是基于一个 1st sort 结果,3rd sort 是基于2nd sort...对于2nd sore,只排序“Peter”的Key,对于3rd sort,只需要排序项目“2500”。我必须编写 2nd SortedList 和 3rd SortedList?
  • 你提到你已经有一个IComparer,可能你可以实现另一个来实现你想要的(虽然不太清楚你想要实现什么,例如你想要1个表或3个表? 你想要用户交互或只需要结果)。因此,您已经使用的 IComparer 代码是什么可能有助于在您的问题中列出。

标签: c# sorting sortedlist columnsorting


【解决方案1】:

您可以在排序列表中使用 LinQ:

var Customsortedlist =  SortedList<T>.OrderBy(e => e.Name)
                                     .ThenByDescending(e => e.Allowance)
                                     .ThenBy(e => e.times );

然后你可以像这样转换它:

dataTable = Customsortedlist.AsDataView().ToTable();

【讨论】:

  • Linq 是一个不错的选择。但我不确定是否有 100 万条记录的效率。顺便说一句,如何将我自己的 IComparer 添加到 Linq 中?因为比较可能是具有不同字体/背景色/...对象的单元格。
  • 您可以像这样添加比较器:var Customsortedlist = SortedList.OrderBy(e => e.Name, new MyComparerClass())...
  • 好的。我接受这个答案,因为即使我在这个项目中没有使用 Linq,如果我们使用 Linq 也很实用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
相关资源
最近更新 更多