【发布时间】:2012-03-04 07:17:26
【问题描述】:
我试图找到一种有效的方法来根据数组的每个字符串元素中的数值对字符串数组进行排序。我目前正在使用 Array.Sort(array, customComparer) 静态方法(快速排序),我的自定义比较器类(按降序排序)是:
class StringComparer : IComparer<string>
{
public int Compare(string a, string b)
{
string s1 = a;
string s2 = b;
Match matchA = Regex.Match(s1, @"\d+$");
Match matchB = Regex.Match(s2, @"\d+$");
long numberA = long.Parse(matchA.Value);
long numberB = long.Parse(matchB.Value);
if (numberB - numberA < 0)
{
return -1;
}
else
{
return 1;
}
}
}
这很好用,但有时排序需要花费太多时间,在 2.4Ghz 处理器上,一个包含 100 000 个字符串的数组需要花费超过一分钟的时间。我想知道是否有更有效的方法来完成同样的事情。例如,实现不同的排序算法或采用另一种方法,例如使用字典并对值进行排序(该值是字符串的数字部分)。有什么建议?提前致谢!
【问题讨论】:
-
“使用字典并按值排序”听起来很有希望。你试过了吗?
-
你可以试试Radix Sort,它针对这种排序:“通过按具有相同有效位置和值的单个数字对键进行分组,使用整数键对数据进行排序”
-
@Luiggi Mendoza:排序算法不是瓶颈。
标签: c# arrays performance algorithm sorting