1

次の文字列のリストがあります

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

4 に答える 4

4

これを試して:

    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));
    });
于 2013-06-24T07:29:15.347 に答える
3
 var sort = strTest.OrderBy(x => int.Parse(x.Replace("B",string.Empty)));

出力: B1、B2、B3、B10

于 2013-06-24T07:28:51.443 に答える
1

空の文字列に置き換えB、残りの文字列を数値に変換します。

var sort = strTest.OrderBy(x => Convert.ToInt32(x.Replace("B", "")));
于 2013-06-24T07:25:45.363 に答える