hun*_*m06 5 c# arrays sorting string
我有一个文件名数组,我想按数字样式排序,请给我一个解决方案.
例1:
原始数组:[name99.txt, name98.txt, name100.txt]
排序数组:( [name98.txt, name99.txt, name100.txt]
使用字符串排序,排序结果是[name100.txt, name98.txt, name99.txt])
例2:
原始数组:[a99.txt, b98.txt, b100.txt]
排序数组:( [a99.txt, b98.txt, b100.txt]
使用字符串排序,排序结果是[a99.txt, b100.txt, b99.txt])
string[] ar = new string[] { "name99.txt", "name98.txt", "name100.txt" };
Array.Sort(ar, (a, b) => int.Parse(Regex.Replace(a, "[^0-9]", "")) - int.Parse(Regex.Replace(b, "[^0-9]", "")));
foreach (var a in ar)
Console.WriteLine(a);
Run Code Online (Sandbox Code Playgroud)
以上假设您的文件被调用name###.txt.对于真正的数字排序,请使用以下更复杂的版本:
public static void NumericalSort(string[] ar)
{
Regex rgx = new Regex("([^0-9]*)([0-9]+)");
Array.Sort(ar, (a, b) =>
{
var ma = rgx.Matches(a);
var mb = rgx.Matches(b);
for (int i = 0; i < ma.Count; ++i)
{
int ret = ma[i].Groups[1].Value.CompareTo(mb[i].Groups[1].Value);
if (ret != 0)
return ret;
ret = int.Parse(ma[i].Groups[2].Value) - int.Parse(mb[i].Groups[2].Value);
if (ret != 0)
return ret;
}
return 0;
});
}
static void Main(string[] args)
{
string[] ar = new string[] { "a99.txt", "b98.txt", "b100.txt" };
NumericalSort(ar);
foreach (var a in ar)
Console.WriteLine(a);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7774 次 |
| 最近记录: |