C# 字符串排序

c#根据字符串进行排序 //根据字符串排序的规则就是根据开头字母来进行排序,开头字母a-z来进行,a是最小的,z是最大的,仔细一看,他和冒泡的方法其实是差不多的 class Program { static void Main(string[] args) { int q = 0;//定义两个循环变量 int i = 0; string[] a= { "AG","KB","QJ","DB6","SV","Q9","BS" 阅读详情

方法实现

///<summary>
///主要用于字符串类型排序
///规则:1.如果字符串不是数字开头,且数字前存在不同字符,则按照不同字符前后决定排序
///规则:2.如果字符串不是数字开头,且数字前字符相同,则按照数字区域整体大小排序,若数字相同,则看后续字符比较
///规则:3.如果两个字符存在包含则按照数据长度对比
///</summary>
public class StringRankComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        if (x == null || y == null)
        {
            throw new ArgumentException("Can't be null");
        }
        
        if (string.IsNullOrEmpty(x.Trim()) && !string.IsNullOrEmpty(y.Trim()))
        {
            return 1;
        }
        else if (!string.IsNullOrEmpty(x.Trim()) && string.IsNullOrEmpty(y.Trim()))
        {
            return -1;
        }
        else if (string.IsNullOrEmpty(x.Trim()) && string.IsNullOrEmpty(y.Trim()))
        {
            return 0;
        }
        
        char[] arr1 = x.ToCharArray();
        char[] arr2 = y.ToCharArray();
        int i = 0, j = 0;
        while (i < arr1.Length && j < arr2.Length)
        {
            if (char.IsDigit(arr1[i]) && char.IsDigit(arr2[j]))
            {
                string s1 = "", s2 = "";
                while (i < arr1.Length && char.IsDigit(arr1[i]))
                {
                    s1 += arr1[i];
                    i++;
                }
                while (j < arr2.Length && char.IsDigit(arr2[j]))
                {
                    s2 += arr2[j];
                    j++;
                }
                if (int.TryParse(s1, out int is1) && int.TryParse(s2, out int is2))
                {
                    if (is1 > is2)
                    {
                        return 1;
                    }
                    if (is1 < is2)
                    {
                        return -1;
                    }
                }
                else
                {
                    int result = string.Compare(s1, s2, true);
                    if (result != 0)
                    {
                        return result;
                    }
                }
            }
            else
            {
                if (arr1[i] > arr2[j])
                {
                    return 1;
                }
                else if (arr1[i] < arr2[j])
                {
                    return -1;
                }
                i++;
                j++;
            }
        }
        
        return arr1.Length == arr2.Length ? 0 : arr1.Length > arr2.Length ? 1 : -1;
    }
}

方法调用


List<string> rankList = new List<string>()
{
    "ABC", "ABC1", "ABC2", "ABC03", "ABC120", "AB1", "AC1", "A1", "A", "ABC1A"
};
rankList.OrderBy(p => p, new StringRankComparer())

结果:{ "A", "A1", "AB1", "ABC", "ABC1", "ABC1A", "ABC2", "ABC03", "ABC120", "AC1" }

C# 数字字符串排序 例如:string[] strings = { "D10", "D2", "D1","D0", "D3", "D9" };升序后:strings = { "D0", "D1", "D2","D3", "D9", "D10" };使用:Array.Sort(strings, new SemiNumericComparer());以上两个方法都可以实现数字字符串排序,如果数据量大推荐方法二。方法二:自定义比较器。 阅读详情

相关推荐

C#: 实现数字字符串排序算法

方法比较它们的数值大小。如果只有一个字符串是数字字符串,则我们将它排在非数字字符串之前。如果两个字符串都不是数字字符串,则使用默认的字符串比较规则进行比较。在编程中,经常需要对字符串中的数字进行排序。通过自定义比较器,我们可以根据数字字符串的数值大小对列表进行排序,从而满足各种排序序需求。方法中,我们首先尝试将两个字符串解析为整数。如果两个字符串都是数字字符串,我们将使用。可以看到,列表中的数字字符串按照数值大小进行了排序,非数字字符串则按照默认规则排序。方法中,我们创建了一个包含各种数字字符串的列表。

Meta_C的博客 644

C#字符串排序

一、字符串排序namespace 字符串排序 { class Program { static void Main(string[] args) { string num; num = Console.ReadLine(); char[] array = num.ToCharAr

DotNet技术匠 6719

按键名排序C#请求字符串的实现方法

解析请求字符串为对象的过程涉及将URL查询字符串(位于"?"之后的部分)中的参数名和参数值提取出来,并建立相应的键值对关系。这一过程需要考虑到请求字符串中可能存在的特殊字符,如空格、加号等,它们需要进行适当的编码处理。

weixin_35797963的博客 991

【C# 技术】 C# 常用排序方式——常规数据排序

在最近的项目中经常会对C#中的数据进行排序,对于基本数据类型,其排序方式比较简单,只需要调用内置算法即可实现,但对于自定义数据类型以及自定义排序规则的情况实现起来就比较麻烦,所以在本文章中将详细介绍一下在中C#中如何对数据进行排序。

grape_yan的博客 1967

C#冒泡排序应用:混合字符串数组升序排列

字符串排序是一种将字符串数组或集合中的元素按照一定的顺序重新排列的过程。根据排序规则的不同,字符串排序可以分为多种类型:字典顺序排序:按照字符串中字符的字典顺序进行排序,类似于词典中单词的排列方式。自然排序:根据字符串表示的实际数值进行排序,例如”10”会排在”2”之后。长度优先排序:首先按照字符串长度进行排序,长度相同的字符串再按照字典顺序排序。排序的实现可以是稳定的,也可以是不稳定的。稳定排序意味着相同排序键值的元素将保持它们原始的顺序。

weixin_42168902的博客 1134

【Konva】解决图形加入group后无法获取到绝对坐标,以及group内绘制新图形坐标偏移的问题

解决konva绘图开发时“图形加入group后坐标不会变动,无法获取到绝对坐标”的问题

近10年前端开发工作经验,为你分享日常经验所得 1500

C# 按字母/汉字排序字符串列表

通过自定义比较器,List.Sort 方法能够灵活地处理多种排序需求。你可以根据实际的需求,选择适合的比较方式进行排序。上述代码演示了如何实现简单的混合字符串排序,涵盖了数字、字母和汉字的顺序。

a451319296的博客 1498

昇腾310B实战:FFmpeg硬件加速全流程解析与性能优化

本文详细解析了昇腾310B与FFmpeg硬件加速的全流程,包括环境配置、性能优化及常见问题排查。通过实战案例展示,昇腾310B在视频转码中性能提升可达6倍,同时降低功耗,特别适合多媒体处理和高性能计算场景。

m3n5b7v8c9x的博客 735

C#中字符串排序的问题和解决方法

先说下问题,简单的说就是一组数据 String[] data = new string[]{ "-3A01","-03A02", "-301","-302", "-201","-202", "-101","-102"...

diepu1524的博客 597

dxf-viewer 查看器

dxf-viewer SDK 的示例,它是一个基于 Three.js 和 Vue3 构建的基于 WebGL 的 BIM 模型查看器。它用于查看 DWG/DXF/PDF 文件。面积测量 - 角度测量 -标记。

qq_25547755的博客 866

华三R4900 G5服务器实战:用PMC P460-B4阵列卡配置RAID1+RAID6,并搞定CentOS 7.9安装(含热备盘设置)

本文详细解析了在华三R4900 G5服务器上使用PMC P460-B4阵列卡配置RAID1+RAID6混合阵列的全过程,包括热备盘设置和CentOS 7.9系统安装。通过实战步骤和性能优化建议,帮助企业IT人员高效部署高可用存储方案,特别适合需要数据冗余和系统稳定性的企业级应用场景。

weixin_29248653的博客 358

c#让字符串按数字排序问题

c#让字符串按数字排序问题 // An highlighted block class SortByNum : IComparer<string> { public int Compare(string x, string y) { int numX; int.TryParse(removeNot...

weixin_43762874的博客 1965

如何在两台电脑间,实现zotero文件和数据两种类型的双向同步

在完成本文配置后,可以在两台不同的电脑间,通过两步简单操作实现zotero数据和文件的双向同步,并且全程免费首先,打开zotero->编辑->首选项->高级->文件与文件夹,配置链接附件根目录以及数据存储位置,前者将pdf文件通过相对地址形式存于zotero中(而非真正的pdf文件),后者则是设置用户本地数据的地址建议设置在数据盘D盘,可以避免后续对盘名的修改(因为基本每个电脑都存在C盘和D盘)然后,同一页面下,打开同步,配置数据以及文件同步方式。数据同步保持默认即可,文件同步选择WebDav,然后去坚果云

weixin_43008154的博客 1万+

C# 字符串排序时指定偏好的排列顺序

C# 字符串排序时指定偏好的排列顺序独立观察员 2023 年 8 月 25 日不知道大家有没有遇到过某些字符串数据在显示到界面上时需要按一定顺序排列的情况,如果内容是数值或字母自然好办,默认的排序功能就搞定了。那么如果是中文字符串呢?本文将会提供一个能在调用 OrderBy 方法时传入的字符串比较器,能够在一定程度上指定你偏爱的排列顺序,下面就一起来看看吧。首先来看看原始数据:List list1...

dotNET跨平台 673

RK3588, 绘制中文OSD,实现左右对齐

基于RK3588,实现中文OSD, 上下左右对齐。

J。 662

【WRFDA安装第一期】安装 WRFDA 以运行 3DVAR/4DVAR数据同化

【WRFDA安装第一期】安装 WRFDA 以运行 3DVAR/4DVAR数据同化

WW、forever的博客 1896

C#如何对字符串数组进行排序?

实例:    String[] ssss = newString[] { "2011/3", "2011/2", "2011/5", "2012/5" };    //排序方式一:使用扩展方法   IEnumerable query =ssss.OrderBy(x => x);      //排序方式二:    varsortedWords = from s in ssss     

lezzyy的博客 7460

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2629

C#数字字符串排序orderby的问题解决

strs.OrderBy(n=>n) 得出的结论是 1, 11,111,2,22,222。想要得出 1,2,11,22,111,222 咋办?

qq_33654918的博客 845

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# 字符串排序组合

<br />1.string s1="abc";string s2="aabbcd";都已按照字母排序,现需要组合两个字符串得到 string s3="aaabbbccd";按照字母排序。 <br />using System;<br />using System.Collect

kingdompk722的专栏 1244

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# 字符串集合(List<string>)排序

C# 字符串集合排序 public List<string> ListSort(List<string> strList) { if(strList!=null && strList.Count>0) { strList.Sort((x,y)=>-x.CompareTo(y)); //逆序 //strList.Sort((x,y)=>x.CompareTo(y)); //顺序 } return strList; } 欢迎使用Ma

weixin_45074569的博客 8975

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c#中的冒泡排序和字符串Replace方法

一.冒泡排序 口诀: N 个数字来排队,两两相比小靠前。 ​ 外层循环 N-1,内层循环 N-1-i。 案例:定义一个数组,输出后从大到小排列 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _...

weixin_44870681的博客 533

C#字符串数组中含数字时的排序

遇到这个问题时,从论坛看到的,放到这来做个记录! 有个array: string[333] fileList = {"list_1.htnl","list_10.html","list_100.html","list_101.html"......,"list_109.html","list_11.html"......}意思就是,字符串默认的排序并不是按照这种最末尾的数字排序的。 我想要生

学而不思则罔,思而不学则殆 1万+

C#字符串数组排序

用Array.Sort(arr);比如: A1,A2,A10。

网络Online 3293

C# 字符串排序、反向输出方法

string str = "ecdba"; //字符串排序 char[] charArray = str.ToCharArray(); Array.Sort(charArray); Console.WriteLine(string.Join("", charAr...

清风专栏 4761
上一篇: C# 多网卡UDP广播
下一篇: C# 获取文件或者文件夹大小
码哈
博客等级 码龄8年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值