c#前面的快速字符串插入

时间:2015-07-08 06:44:29

标签: c# stringbuilder

我需要在开头插入字符串。现在我使用StringBuilder.Insert(0, stringToInsert)插入前面,但这需要花费很多时间(大约2分钟,80,000个字符串)。

append()方法运行速度更快(80,000个字符串为30秒),但这不是我需要的顺序。如何反转字符串的顺序(而不是字符串本身)并减少插入时间?

2 个答案:

答案 0 :(得分:6)

是的,逆转可枚举更快。

例如:

var numStrings = 80000;
var strings = new List<String>();
for(var i = 0; i < numStrings; i++)
{
    strings.Add(Guid.NewGuid().ToString());
}

var sw = new Stopwatch();
sw.Start();
var sb = new StringBuilder();
foreach(var str in Enumerable.Reverse(strings))
    sb.Append(str);

sw.Stop();
sw.ElapsedMilliseconds.Dump(); // 13 milliseconds
sb.Dump();

sw = new Stopwatch();
sw.Start();
sb = new StringBuilder();
foreach(var str in strings)
    sb.Insert(0, str);

sw.Stop();
sw.ElapsedMilliseconds.Dump(); // 42063 milliseconds
sb.Dump();

答案 1 :(得分:1)

假设您可以将它们放入数组中,如果您有足够的内存,则没有任何东西可以阻止您执行此操作,使用相反顺序的索引迭代字符串数组,然后使用append。这应该非常快。

StringBuilder s = new StringBuilder()
for(i = array.Length - 1; i >= 0; i--)
{
    s.Append(array[i]);
}

另一种方法是使用Reverse with Join。但是之前的方法应该以快速的方式完成 string.Join("", array.Reverse())