如何按字母数字升序排序此字符串

Job*_*mno 1 c# linq sorting

我有以下字符串列表

var strTest = new List<string> { "B2", "B1", "B10", "B3" };
Run Code Online (Sandbox Code Playgroud)

我想将它们排序如下“B1,B2,B3,B10”。

如果我使用 LINQ OrderBy,它会以“B1、B10、B2、B3”的方式排序

请帮忙。这是我的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SortingDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var strTest = new List<string> { "B2", "B1", "B10", "B3" };
            var sort = strTest.OrderBy(x => x);
            var sortedStr = string.Join(",", sort);
            Console.WriteLine(sortedStr);
            Console.ReadLine();
        }
Run Code Online (Sandbox Code Playgroud)

ojl*_*ecd 5

尝试这个:

    var strTest = new List<string> { "B1", "B2", "B3", "B10" };
    strTest.Sort((s1, s2) => 
    {
        string pattern = "([A-Za-z])([0-9]+)";
        string h1 = Regex.Match(s1, pattern).Groups[1].Value;
        string h2 = Regex.Match(s2, pattern).Groups[1].Value;
        if (h1 != h2)
            return h1.CompareTo(h2);
        string t1 = Regex.Match(s1, pattern).Groups[2].Value;
        string t2 = Regex.Match(s2, pattern).Groups[2].Value;
        return int.Parse(t1).CompareTo(int.Parse(t2));
    });
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案 - 如果有人需要将此应用于可能有或没有数字和/或空格的字符串,只需将模式修改为: `string pattern = "([A-Za-z\\s]*) ([0-9]*)";` (2认同)