按子字符串对列表进行排序

MMK*_*MMK -3 c#

尝试对字符串列表进行排序

    List<string> strings = new List<string>() { "N3 2021","N4 2021","N1 2022","N2 2022","N4 2022","N3 2022","N2 2023","N1 2023","N3 2023"};

    var orderedList = strings.OrderBy(x => x.Substring(2).Trim()).ToList();

    Console.WriteLine(String.Join(", ", orderedList));
Run Code Online (Sandbox Code Playgroud)

电流输出:

N3 2021, N4 2021, N1 2022, N2 2022, N4 2022, N3 2022, N2 2023, N1 2023, N3 2023

期望的输出:

N3 2021, N4 2021, N1 2022, N2 2022, N3 2022, N4 2022, N1 2023, N2 2023, N3 2023

任何帮助将不胜感激。谢谢

更新:

解决方案是:

List<string> strings = new List<string>() { "N3 2021","N4 2021","N1 2022","N2 2022","N4 2022","N3 2022","N2 2023","N1 2023","N3 2023"};
    
var orderedList = strings.OrderBy(x => x.Substring(2).Trim()).ThenBy(y=>y).ToList();
    
Console.WriteLine(String.Join(", ",orderedList));
Run Code Online (Sandbox Code Playgroud)

Joh*_* Wu 5

在我看来,您是按年份排序,然后按某种前缀代码排序。由于年份更重要,您需要将其移至代码左侧以进行排序。

static string RearrangeString(string input)
{
    var tokens = input.Split(' ');
    return string.Join(" ", tokens.Reverse() );
}

public static void Main()
{
    var strings = new List<string>() { "N3 2021","N4 2021","N1 2022","N2 2022","N4 2022","N3 2022","N2 2023","N1 2023","N3 2023"};
    var orderedList = strings.OrderBy(RearrangeString).ToList();

    Console.WriteLine(String.Join(", ", orderedList));
}
Run Code Online (Sandbox Code Playgroud)

小提琴