首页 科普 资讯 养生 问答 找医院 相关问答
首页> 问答

C#字符串排序

发布网友 发布时间:2024-10-21 20:32

我来回答

5个回答

热心网友 时间:2024-10-21 22:09

List<string> strList = new List<string>();

strList.Add("九星花园10-1-1东");

strList.Add("九星花园10-1-2西");

strList.Add("九星花园11-1-1西");

strList.Add("九星花园11-1-2东");

strList.Add("九星花园1-1-4东");

strList.Add("九星花园1-1-4西");

strList.Add("九星花园12-1-5东");

strList.Add("九星花园12-1-5西");

strList.Sort(new Comparison<string>(delegate(string str1, string str2)

    {

        return Convert.ToInt32(str1.Substring(4).Split('-')[0]) - Convert.ToInt32(str2.Substring(4).Split('-')[0]);

    }));

foreach (string str in strList)

{

    Console.WriteLine(str);

}

运行以上代码试试,是你需要的效果。

热心网友 时间:2024-10-21 22:04

向【回答者: 一无安慰 | 九级 | 2011-10-11 14:06】学习了,有个小BUG,我修改了下!
按门牌号的3个数一起排序才对!

List<string> strList = new List<string>();
strList.Add("九星花园10-1-1东");
strList.Add("九星花园10-1-2西");
strList.Add("九星花园11-1-2东");
strList.Add("九星花园11-1-1西");
strList.Add("九星花园1-1-4东");
strList.Add("九星花园1-1-4西");
strList.Add("九星花园12-1-5东");
strList.Add("九星花园12-1-5西");

//门牌号高位:"九星花园10-1-2西"的10
string strH = string.Empty;
//门牌号中位:"九星花园10-1-2西"的1
string strM = string.Empty;
//门牌号低位:"九星花园10-1-2西"的2
string strL = string.Empty;
//被比较的数
int intM = 0;
//比较的数
int intS = 0;

strList.Sort(new Comparison<string>(delegate(string str1, string str2)
{
//被比较的数
strH = Convert.ToInt32(str1.Substring(4).Split('-')[0]).ToString();
strM = Convert.ToInt32(str1.Substring(4).Split('-')[1]).ToString();
strL = Convert.ToInt32(str1.Substring(4).Split('-')[2].Replace("东", "").Replace("西", "")).ToString();
intM = Convert.ToInt32(strH + strM + strL);
//比较的数
strH = Convert.ToInt32(str2.Substring(4).Split('-')[0]).ToString();
strM = Convert.ToInt32(str2.Substring(4).Split('-')[1]).ToString();
strL = Convert.ToInt32(str2.Substring(4).Split('-')[2].Replace("东", "").Replace("西", "")).ToString();
intS = Convert.ToInt32(strH + strM + strL);
//比较结果
return intM - intS;
}));
foreach (string str in strList)
{
Console.WriteLine(str);
}

热心网友 时间:2024-10-21 22:11

class Program
{
static void Main(string[] args)
{
List<string> strList = new List<string>();
strList.Add("九星花园10-1-1东");
strList.Add("九星花园10-1-2西");
strList.Add("九星花园11-1-1西");
strList.Add("九星花园11-1-2东");
strList.Add("九星花园1-1-4东");
strList.Add("九星花园1-1-4西");
strList.Add("九星花园12-1-5东");
strList.Add("九星花园12-1-5西");

strList.Sort(new Comparison<string>(delegate(string str1, string str2)
{
return Program.handler(str1) - Program.handler(str2);
}));
foreach (string ss in strList)
{
Console.WriteLine(ss);
}

}
public static int handler(string name)
{
name = name.Remove(0, 4);
string[] values = name.Split('-');
values[2] = values[2].Replace('东', '1');
values[2] = values[2].Replace('南', '2');
values[2] = values[2].Replace('西', '3');
values[2] = values[2].Replace('北', '4');
string value = values[0] + values[1] + values[2];
return Convert.ToInt32(value);
}
}
比对了一下,跟结果没差别

热心网友 时间:2024-10-21 22:08

你中间的1-1-4部分,能够确定是这个固定格式么? (x-y-z)
如果是的话,可以使用正则表达式,提出x,y,z的值,然后进行排序。

但是要注意,只是Demo之类的少量数据这样做可以,大批数据很影响性能。

热心网友 时间:2024-10-21 22:07

using System;
using System.Text;
using System.Collections.Generic;
namespace ArrayOutput
{
class Program
{

static void Main(string[] args)
{
// 输入
string input = @"
九星花园10-1-1东
九星花园10-1-2西
九星花园11-1-1西
九星花园11-1-2东
九星花园1-1-4东
九星花园1-1-4西
九星花园12-1-5东
九星花园12-1-5西
";
// 排序
List<string> sorts = new List<string>();
sorts.AddRange(input.Split("\r\n".ToCharArray(),StringSplitOptions.RemoveEmptyEntries));
sorts.Sort(CustormCompare);

// 输出结果
StringBuilder b = new StringBuilder();
for(int i = 0;i < sorts.Count;i++)
{
b.AppendLine(sorts[i]);
}
string output = b.ToString();
Console.WriteLine(output);
Console.ReadLine();
}
static int CustormCompare(string a,string b)
{
string a_trim = a.Replace("九星花园","").TrimEnd("东西".ToCharArray());
string b_trim = b.Replace("九星花园","").TrimEnd("东西".ToCharArray());
// 移除首尾的汉字后根据-分成数组
string[] a_arr = a_trim.Split("-".ToCharArray());
string[] b_arr = b_trim.Split("-".ToCharArray());
int a_length = a_arr.Length;
int b_length = b_arr.Length;
// 数组长度的较大值
int compare_length = Math.Max(a_length,b_length);
int compare_result = 0;
// 依次比较数组
for(int i = 0;i < compare_length;i++)
{
// 第一个数组可以取数
if(a_length > i)
{
// 第二个数组可以取数
if(b_length > i)
{
int a_int = 0;
int b_int = 0;
int.TryParse(a_arr[i],out a_int);
int.TryParse(b_arr[i],out b_int);
// 按数字比较
compare_result = Math.Sign(a_int - b_int);
}
// 第二个数组取不到数
else
{
// 数组短的b靠前,a<b返回-1
compare_result = -1;
}
}
// 第一个数组取不到数
else
{
// 第二个数组可以取数
if(b_length > i)
{
// 数组短的b靠前,a>b返回-1
compare_result = 1;
}
// 都取不到数 为相等
else
{
compare_result = 0;
}
}
// 已经比较出结果退出 ,如果compare_result为0一直比较到数组的最长为幌子
if(compare_result != 0)
{
break;
}
}
// 靠整数可以比较得结果
if(compare_result != 0)
{
return compare_result;
}
// 返回默认的字符窜比较结果
return string.Compare(a,b);
}
}
}
大运算命排盘,易经算命 喝了过期的药物会怎么样 ...年10月17有效期是2013年9月这种药物算过期吗还能服用吗 中国银行外币整存整取支持币种有什么? 无烟炒锅多少钱一个 我要搜集关于船的诗歌 爱情唯美诗词古韵(11句浪漫的爱情古诗词) 伯明翰德比英超时代 穆斯塔法·萨利弗俱乐部生涯 吉拉德·霍利尔人物生平 戴夫·塞克斯顿执教生涯 阿斯顿维拉足球俱乐部的管理团队 超异能少帅的txt全集下载地址 DNF手游:“红眼”狂战士全网最详细攻略 dnf手游狂战士47层怎么打 扫雷舰艇的由来 反水雷舰艇发展历史 扫雷舰艇扫雷舰艇由来 地雷狼MW330型扫雷车体积装备 汽水音乐关注和粉丝如何隐藏 汽水音乐怎么把歌单公开 把歌单公开方法分享 汽水音乐如何隐藏歌单 汽水音乐设置隐私歌单方法介绍 缘深情浅 路长路短什么意思 一键u盘启动快捷键使用教程 短袖配什么裤子好看短袖可以搭配的五种类型裤子 办理信用证的流程是什么? 男性长期手淫有什么不好的影响,会影响生育么 哪位医生帮我,5年级开始手淫,现在总觉得虚,全身莫名其妙得疼,想戒戒... 想戒掉手银,没有毅力怎么办,怎样坚持? 哪位会计大神帮帮,顺便帮我画一下分录,谢谢啦,,急啊!!!_百... 刘天爱和吴糖什么关系 出差的住宿费叫什么 出差吃饭叫什么科目 法院传票是通过手机短信通知的吗? 十二生肖的花代号 十二生肖属花对照表 ...您耐心的解答,回答的详细追加20到50分,特别满意给100分 央视5NBA比赛(12月27日:火箭VS黄蜂)回顾有首英文歌叫什么? 谢谢大家 3月10日央视五套NBA球赛结束时放的那首英文歌叫什么 CCTV5直播完NBA比赛后得精彩回顾放的英文歌是什么? The Click Five前主唱为什么要退出乐队啊 好可惜 他退出后又创建了什么... 请问这道英语题为什么选B,助动词已经表明了时态后面不是接原形吗_百度... 这道题为什么选B?(初中英语题) 英语选择51题为什么选b什么意思 英语,为什么选b 关于《后出师表》 白天有争吵,晚上十一点带七八个人来我家打架…是什么行为告他什么罪_百... ...七八个人也还手了,结果前半月公安也把我们打架的几个人也关了,要... 年满14周岁,未满16周岁的七八个学生打架,赔偿问题 我朋友找我吃饭!被七八个人打了一顿!现在认定轻伤!被打后饭店老板把我... 房贷,我打算十年内提前还清,银行还要收我违约金吗 在招商银行办理房贷十年,已经第5年了,现想提前还清贷款,需要交违约金... 稚优泉是哪个国家的牌子稚优泉是不是三无产品 工友之间误伤,一切费用应该谁管 稚优泉是哪个国家的 化妆品开封后保质期多久 未闻花名概括一下故事内容不超过200字 未闻花名图片 字翻译 要百分百准确! 未闻花名_1000字 和吃羊肉有关的那些事儿 羊肉怎么做没有膻味而且最好吃? 北方美食:饕餮盛宴,让你吃爽到忘记冷-开发区! 海苔怎么吃才好吃? 海苔肉松饼干棒制作方法 非常凶姐的介绍 男人说和你在一起是我最大的欢喜,是何意 现货白银最少需要买多少?怎么开户? 现货白银开户最少需要多少钱? 现货白银最少交易量是多少? 现货白银开户最低要多少钱? 一万元可以做现货白银吗,现货白银最低门槛多少钱呢? 牛黄降压丸的功效与作用副作用 王者荣耀积分暴击活动怎么玩-积分暴击活动玩法介绍 王者荣耀积分暴击活动怎么做 王者荣耀积分暴击活动怎么玩 王者荣耀积分暴击活动10月攻略 全国注册咨询工程师执业资格考试命题趋势权威试卷:选考科目内容简介_百 ... 大众帕萨特定位器一般安装在什么位置 全国注册咨询工程师执业资格考试命题趋势权威试卷:选考科目图书信息_百 ... 07年帕萨特2、0换了高压包、分火线、火花塞,车速30到40~60发动有跳动... 全国注册咨询工程师执业资格考试命题趋势权威试卷:选考科目目录_百度知 ... 2007年大众帕萨特2.0加油到1500机油灯亮是怎么回事 如何选择与安装踢脚板 如何教导孩子与家中老年人相处? 魅族手机进水屏幕失灵修修带多少钱 如何贴木质踢脚线(地脚线) 魅族3手机屏幕碎了,且触摸失灵了,换的什么部件换的话需多少钱,一定要返... 如何与爱作的老人相处? 2008年全国注册咨询工程师投资执业资格考试考前冲刺预测试卷:现代咨询... 全国注册咨询工程师执业资格考试名家答疑宝典:现代咨询方法与实务2009... 2009全国注册咨询工程师执业资格考试名家答疑宝典:现代咨询方法与实务... 2012年全国注册咨询工程师执业资格考试临考冲刺9套题:宏观经济政策与发 ...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com