Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将此字符串按字母数字升序排序_C#_Linq_Sorting - Fatal编程技术网

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

C# 如何将此字符串按字母数字升序排序,c#,linq,sorting,C#,Linq,Sorting,我有下面的字符串列表 var strTest = new List<string> { "B2", "B1", "B10", "B3" }; var strTest=新列表{“B2”、“B1”、“B10”、“B3”}; 我想把它们分类如下“B1,B2,B3,B10” 如果我使用LINQ OrderBy,它的排序方式是“B1,B10,B2,B3” 请帮忙。这是我的密码 using System; using System.Collections.Generic; using Sys

我有下面的字符串列表

var strTest = new List<string> { "B2", "B1", "B10", "B3" };
var strTest=新列表{“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();
        }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
名称空间排序演示
{
班级计划
{
静态void Main(字符串[]参数)
{
var strTest=新列表{“B2”、“B1”、“B10”、“B3”};
var sort=strTest.OrderBy(x=>x);
var sortedStr=string.Join(“,”,sort);
控制台写入线(分拣机);
Console.ReadLine();
}

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

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

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

var sort = strTest.OrderBy(x => Convert.ToInt32(x.Replace("B", "")));
输出:B1、B2、B3、B10

输出:B1、B2、B3、B10

    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));
    });
var strTest=新列表{“B1”、“B2”、“B3”、“B10”};
strTest.Sort((s1,s2)=>
{
字符串模式=“[A-Za-z])([0-9]+)”;
字符串h1=Regex.Match(s1,pattern).Groups[1]。值;
字符串h2=Regex.Match(s2,pattern).Groups[1].值;
如果(h1!=h2)
返回h1.CompareTo(h2);
字符串t1=Regex.Match(s1,pattern).Groups[2].Value;
字符串t2=Regex.Match(s2,pattern).Groups[2].Value;
返回int.Parse(t1).CompareTo(int.Parse(t2));
});
试试这个:

    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));
    });
var strTest=新列表{“B1”、“B2”、“B3”、“B10”};
strTest.Sort((s1,s2)=>
{
字符串模式=“[A-Za-z])([0-9]+)”;
字符串h1=Regex.Match(s1,pattern).Groups[1]。值;
字符串h2=Regex.Match(s2,pattern).Groups[1].值;
如果(h1!=h2)
返回h1.CompareTo(h2);
字符串t1=Regex.Match(s1,pattern).Groups[2].Value;
字符串t2=Regex.Match(s2,pattern).Groups[2].Value;
返回int.Parse(t1).CompareTo(int.Parse(t2));
});
您可以试试这个

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

   var res = strTest.OrderBy(x=> int.Parse(x.Split('B')[1]));
var strTest=新列表{“B2”、“B1”、“B10”、“B3”};
var res=strTest.OrderBy(x=>int.Parse(x.Split('B')[1]);
或者

var strTest=新列表{“B2”、“B1”、“B10”、“B3”};
var res=strTest.OrderBy(x=>int.Parse(x.Remove(0,1));
您可以试试这个

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

   var res = strTest.OrderBy(x=> int.Parse(x.Split('B')[1]));
var strTest=新列表{“B2”、“B1”、“B10”、“B3”};
var res=strTest.OrderBy(x=>int.Parse(x.Split('B')[1]);
或者

var strTest=新列表{“B2”、“B1”、“B10”、“B3”};
var res=strTest.OrderBy(x=>int.Parse(x.Remove(0,1));

请看这里的答案:和这里:也请看这里的答案:和这里:伟大的答案-如果有人需要将其应用于可能有或可能没有数字和/或空格的字符串,只需将模式修改为:
string pattern=“([A-Za-z\\s]*)([0-9]*)”
Great response-如果有人需要将此应用于可能有或可能没有数字和/或空格的字符串,只需将模式修改为:
string pattern=“([A-Za-z]*)([0-9]*)”;