Бұл жолды алфавиттік-сандық бойынша сұрыптау әдісі

Жолдың келесі тізбесі бар

var strTest = new List { "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 { "B2", "B1", "B10", "B3" };
            var sort = strTest.OrderBy(x => x);
            var sortedStr = string.Join(",", sort);
            Console.WriteLine(sortedStr);
            Console.ReadLine();
        }
1
Сонымен қатар, мына жауаптарды қараңыз: stackoverflow.com/questions/248603/hellip; және мына жерде: stackoverflow.com/questions/1323550/…
қосылды автор Matthew Watson, көзі

7 жауаптар

мына әрекетті орындаңыз:

    var strTest = new List { "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));
    });
4
қосылды
Үлкен жауап - егер сіз оны сандық және/немесе бос орындар болуы мүмкін немесе болмауы мүмкін жолдарға қолдану керек болса, өрнекті өзгерту қажет: string pattern = «([A-Za-z \\ s] *) ([0-9] *) «;
қосылды автор Gumzle, көзі
 var sort = strTest.OrderBy(x => int.Parse(x.Replace("B",string.Empty)));

шығу: B1, B2, B3, B10

4
қосылды

Сіз мұны көріңіз

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

   var res = strTest.OrderBy(x=> int.Parse(x.Split('B')[1]));

немесе,

  var strTest = new List { "B2", "B1", "B10", "B3" };
  var res = strTest.OrderBy(x=> int.Parse(x.Remove(0,1)));
1
қосылды

Сіз мұны көріңіз

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

   var res = strTest.OrderBy(x=> int.Parse(x.Split('B')[1]));

немесе,

  var strTest = new List { "B2", "B1", "B10", "B3" };
  var res = strTest.OrderBy(x=> int.Parse(x.Remove(0,1)));
1
қосылды

Сіз мұны көріңіз

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

   var res = strTest.OrderBy(x=> int.Parse(x.Split('B')[1]));

немесе,

  var strTest = new List { "B2", "B1", "B10", "B3" };
  var res = strTest.OrderBy(x=> int.Parse(x.Remove(0,1)));
1
қосылды

Бос жолмен B ауыстырыңыз және қалған жолды нөмірге түрлендіріңіз.

var sort = strTest.OrderBy(x => Convert.ToInt32(x.Replace("B", "")));
1
қосылды
hi kabayan :)
қосылды автор John Woo, көзі
Hi kabayan @JW. Бұл сұраққа рахмет
қосылды автор Jobert Enamno, көзі

Бос жолмен B ауыстырыңыз және қалған жолды нөмірге түрлендіріңіз.

var sort = strTest.OrderBy(x => Convert.ToInt32(x.Replace("B", "")));
1
қосылды
hi kabayan :)
қосылды автор John Woo, көзі
Hi kabayan @JW. Бұл сұраққа рахмет
қосылды автор Jobert Enamno, көзі