【问题标题】:How to Sort this String in Ascending Alphanumeric如何以升序字母数字对该字符串进行排序
【发布时间】:2013-06-20 15:20:37
【问题描述】:

我有以下字符串列表

var strTest = new List<string> { "B2", "B1", "B10", "B3" };

我想将它们排序为“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();
        }

【问题讨论】:

标签: c# linq sorting


【解决方案1】:

试试这个:

    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));
    });

【讨论】:

  • 很好的答案 - 如果有人需要将此应用于可能有或没有数字和/或空格的字符串,只需将模式修改为:string pattern = "([A-Za-z\\s]*)([0-9]*)";
【解决方案2】:
 var sort = strTest.OrderBy(x => int.Parse(x.Replace("B",string.Empty)));

输出:B1,B2,B3,B10

【讨论】:

    【解决方案3】:

    用空字符串替换B,并将剩余的字符串转换为数字。

    var sort = strTest.OrderBy(x => Convert.ToInt32(x.Replace("B", "")));
    

    【讨论】:

      【解决方案4】:

      你可以试试这个

         var strTest = new List<string> { "B2", "B1", "B10", "B3" };
      
         var res = strTest.OrderBy(x=> int.Parse(x.Split('B')[1]));
      

      或者,

        var strTest = new List<string> { "B2", "B1", "B10", "B3" };
        var res = strTest.OrderBy(x=> int.Parse(x.Remove(0,1)));
      

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 2013-09-04
        相关资源
        最近更新 更多