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