尝试对字符串列表进行排序
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)
在我看来,您是按年份排序,然后按某种前缀代码排序。由于年份更重要,您需要将其移至代码左侧以进行排序。
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)