我有一个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是次级列时,反之亦然)。在我的示例中,辅助列未排序。
答案 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()