gpt4 book ai didi

c# - 如何按数字样式对字符串数组进行排序?

转载 作者:太空狗 更新时间:2023-10-29 22:17:05 24 4
gpt4 key购买 nike

我有一个文件名数组,我想按数字样式对它进行排序,请给我一个解决方案。

示例 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);

以上假定您的文件总是名为 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);
}

关于c# - 如何按数字样式对字符串数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6723487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com