列表 C# 中的复合排序<string>



朋友们,我有一个这样的列表:

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);

相关内容

最新更新