-5

我确实有一个字符串列表,其中包含

"aa1"
"aa2"
"aa3"
"bb1"
"bb2"
"bb3"

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

我想以以下形式对其进行排序或重新排序

"aa1"
"bb1"
"aa2"
"bb2"
"aa3"
"bb3"

那我该怎么做

4

2 回答 2

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);
于 2013-02-05T23:44:39.243 回答
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();
于 2013-02-05T23:42:52.663 回答