对2D字符串列表进行排序

时间:2015-04-08 15:20:09

标签: c#

我有一个2D字符串列表(字符串列表)。我想根据某个特定的列对其进行排序。

List<List<String>> matrix = new List<List<String>>();
matrix.Add(new List<String>());
matrix[0].Add("A"); 
matrix[0].Add("1"); 
matrix[0].Add("2");       

matrix.Add(new List<String>());
matrix[1].Add("B"); 
matrix[1].Add("0"); 
matrix[1].Add("1");           

matrix.Add(new List<String>());
matrix[2].Add("C"); 
matrix[2].Add("0"); 
matrix[2].Add("2");

matrix.Add(new List<String>());
matrix[3].Add("D"); 
matrix[3].Add("1"); 
matrix[3].Add("1");

根据第2列对其进行排序时,它应如下所示:

Column 1        Column 2        Column 3
--------        --------        --------
B               0               1
C               0               2
A               1               2
D               1               1

根据第3列对其进行排序时,它应如下所示:

Column 1        Column 2        Column 3
--------        --------        --------
B               0               1
D               1               1
A               1               2
C               0               2

理解二级列的排序但不是必需的(当列2是主列3是次级列时,反之亦然)。在我的示例中,辅助列未排序。

1 个答案:

答案 0 :(得分:2)

您可以使用OrderBy

var orderedResult = matrix.OrderBy(x => x[1])

其中1是列表中第二项的索引。我建议不要创建列表列表,而是创建2D数组或具有适当类型的1D数组。

这是非常不安全的,特别是当您有不同大小的列表时。您可以使用长度检查“改善”这个:

var orderedResult = matrix.OrderBy(x => x.Count > 1 ? x[1] : null)

如果您希望结果为List,请使用ToList()

var orderedResult = matrix.OrderBy(x => x.Count > 1 ? x[1] : null).ToList()