我有列表,我想按多列排序。例如,string []有5个元素(5列),List有10个元素(10行)。例如,我想开始按第1列排序,然后按第3列排序,然后按第4列排序。
如何用C#以最简单的方式完成?
我想到了这样的算法:
但我认为这个算法非常糟糕。如果可能的话,你能否建议我使用C#和.NET已有的功能?
答案 0 :(得分:5)
List<string[]> list = .....
var newList = list.OrderBy(x => x[1]).ThenBy(x => x[3]).ThenBy(x => x[4]).ToList();
答案 1 :(得分:0)
这样的事情:
var rows = new List<string[]>();
var sortColumnIndex = 2;
rows.Sort((a, b) => return a[sortColumnIndex].CompareTo(b[sortColumnIndex]));
这将执行就地排序 - 也就是说,它将对列表的内容进行排序。
可以对多列进行排序,但在比较器委托中需要更多逻辑。
如果您乐意创建另一个集合,可以使用另一个答案中给出的Linq方法。
编辑这里是多列的就地排序示例:
var rows = new List<string[]>();
var sortColumnIndices = new[] { 1, 3, 4 };
rows.Sort((a, b) => {
for (var index in sortColumnIndices)
{
var result = a[index].CompareTo(b[index]);
if (result != 0)
return result;
}
return 0;
});