日期:2014-05-19  浏览次数:20961 次

¥¥¥ 尾为数字的字符串排序小问题
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;
}