0

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

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

任何想法?谢谢

4

2 回答 2

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

首先我用'_'分割字符串

然后我对第一个字段进行数字排序。

最后我按字母顺序对所有剩余字段进行排序

于 2014-10-27T13:42:22.177 回答
0

filenames.Sort();完全符合您的要求

如果你想要延迟执行,你可以这样做: filenames.OrderBy(s => s);

于 2014-10-27T13:08:03.393 回答