我需要一个linq / lambda表达式来排序字符串列表,但只排序前2个字母。应首先对大写字母进行排序。
MyList.Sort((s1, s2) =>
s1.Substring(0, 2).CompareTo(
s2.Substring(0, 2)));
这就是我现在所拥有的。它成功地对前两个字母进行排序,但是当它区分大小写时它会失败......
编辑:这是结果并且有效:
var sorted = MyList.OrderBy(x =>x[0]).ThenBy(x => x[1]).ToList();
答案 0 :(得分:6)
为什么不是一个简单的OrderBy()
和.ThenBy
,因为它们会对排序进行区分大小写的比较,请考虑以下代码:
List<string> unOrderedList = new List<string>() { "bAC", "ABC", "aBc", "abc", "cAb", "Abx", "bbc", "bBx", "cAA" };
var orderedList = unOrderedList.OrderBy(x => x[0]).ThenBy(y=>y[1]).ToList();
在这种情况下,orderedList
的输出为:
ABC
Abx
aBc
abc
bAC
bBx
bbc
cAb
cAA
查看示例here,您可以看到Abx
在列表中的排名高于aBc
,您可以在bBx
和{{1}中看到类似的情况}。