朋友们,我有一个这样的列表:
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"
};
我需要以这种方式对这些List进行排序以获得以下顺序:
149_1
149_2
150_1_A
150_2_A
150_A_1
150_A_1_A
有什么想法吗?感谢
答案 0 :(得分:1)
她的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);
首先,我将字符串拆分为&#39; _&#39;
然后我用数字对第一个字段进行排序。
最后,我按字母顺序对所有剩余字段进行排序
答案 1 :(得分:0)
filenames.Sort();
正是您正在寻找的
如果你想要延迟执行,你可以这样做:
filenames.OrderBy(s => s);