如何以特定形式对列表进行排序?

时间:2013-02-05 23:33:18

标签: c# .net

我有一个包含

的字符串列表
"aa1"
"aa2"
"aa3"
"bb1"
"bb2"
"bb3"

值可以是任何形式,其中“aa3”可以位于底部或任何其他oder

我想以

的形式对其进行排序或重新排序
"aa1"
"bb1"
"aa2"
"bb2"
"aa3"
"bb3"

所以我该怎么做呢

2 个答案:

答案 0 :(得分:3)

以下答案使用Linq以所需顺序返回字符串序列:

List<string> l = new List<string>
{
    "aa1",
    "aa2",
    "aa3",
    "bb1",
    "bb2",
    "bb3"
};

var result = l.OrderBy(s => s[2])
              .ThenBy(s => s.Substring(0, 2));

foreach (string str in result)
    Console.WriteLine(str);

请注意原始列表保持不变。


您还可以通过匿名对象提取这些字符串:

var result = l.Select(s => new { Name = s.Substring(0, 2), 
                                 Num = s[2].ToString() })
                .OrderBy(o => o.Num)
                .ThenBy(o => o.Name);

foreach (var a in result)
    Console.WriteLine(a.Name + a.Num);

答案 1 :(得分:1)

你可以使用LINQ:

var strings = new List<string> { "aa1", "aa2", "aa3", "bb1", "bb2", "bb3" };
var orderedStrings = strings
    .OrderBy(s => s[2])
    .ThenBy(s => s[1])
    .ThenBy(s => s[0])
    .ToList();