朋友们,我有一个这样的列表:
var filenames = new List<string>
{
"150_A_1_A",
"150_A_1",
"149_2",
"149_1",
"150_1_A",
"150_A_2",
"150_2_A"
};
我需要以这样的方式对这些列表进行排序,以获得以下顺序:
149_1
149_2
150_1_A
150_2_A
150_A_1
150_A_1_A
知道吗?感谢
Hers是一个LINQ表达式,可以满足您的需要:
var x = filenames.Select(s => new { value = s, splitted = s.Split('_') }).OrderBy(s => int.Parse(s.splitted[0]));
for (int i = 1; i < x.Max(s => s.splitted.Length); i++)
{
var thisI = i;
x = x.ThenBy(s => thisI >= s.splitted.Length ? null : s.splitted[thisI]);
}
var sorted = x.Select(s => s.value);
首先我用"_"分割字符串
然后我对第一个字段进行数字排序。
最后,我按字母顺序对所有剩余字段进行排序
filenames.Sort();
正是您想要的
如果你想要懒惰的执行,你可以这样做:filenames.OrderBy(s => s);