List <string> C#</string>中的复合排序

时间:2014-10-27 13:06:39

标签: c# sorting tlist

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

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

有什么想法吗?感谢

2 个答案:

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