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