读书人

¥¥¥ 尾为数字的字符串排序小疑点

发布时间: 2012-01-29 21:39:32 作者: rapoo

¥¥¥ 尾为数字的字符串排序小问题
List <string> list = new List <string> ();

list.Add( "a1 ");
list.Add( "a2 ");
list.Add( "a10 ");

list.Sort();

foreach (string str in list)
Console.Out.WriteLine(str);

Console.In.Read();

输出:
a1
a10
a2

我想要的输出是:
a1
a2
a10

我应该怎么做?




[解决办法]
Sort(ICompare)
实现ICompare
先判断长度在比较
[解决办法]
try


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

list1.Add( "a1 ");
list1.Add( "a2 ");
list1.Add( "a10 ");

List <int> list2 = new List <int> ();
foreach (string s in list1)
{
list2.Add(Convert.ToInt32(s.Substring(1)));
}

string[] result = list1.ToArray();
Array.Sort(list2.ToArray(), result);
foreach (string s in result)
{
Console.WriteLine(s);
}
Console.ReadLine();
[解决办法]
这样改一下就可以了

list.Add( "a01 ");
list.Add( "a02 ");
list.Add( "a10 ");
[解决办法]
public int MyComparison(string x, string y)
{
int iX = 0;
int.TryParse(x.Substring(1), out iX);
int iY = 0;
int.TryParse(y.Substring(1), out iY);
return iX - iY;
}

private void button1_Click(object sender, EventArgs e)
{
List <string> list = new List <string> ();

list.Add( "a1 ");
list.Add( "a2 ");
list.Add( "a10 ");

list.Sort(MyComparison);

foreach (string str in list)
Console.WriteLine(str);
}

[解决办法]
public int MyComparison(string x, string y)
{
Regex regex = new Regex( "(? <number> \\d+$) ");
int n1 = int.Parse(regex.Match( str1 ).Groups[ "number "].Value);
int n2 = int.Parse(regex.Match( str2 ).Groups[ "number "].Value);
return n1-n2;
}

读书人网 >C#

热点推荐