在 c# 前面快速插入字符串
Fast string insertion at front in c#
我需要在开头插入字符串。现在我使用 StringBuilder.Insert(0, stringToInsert)
在前面插入,但这会花费很多时间(80,000 个字符串大约需要 2 分钟)。
append()
方法运行得更快(80,000 个字符串需要 30 秒),但这不是我需要的顺序。如何反转字符串的顺序(而不是字符串本身)并减少插入时间?
假设你可以将它们放入一个数组中,并且如果你有足够的内存,没有什么可以阻止你这样做,使用索引以相反的顺序迭代字符串数组,然后使用追加。这应该真的很快。
StringBuilder s = new StringBuilder()
for(i = array.Length - 1; i >= 0; i--)
{
s.Append(array[i]);
}
另一种方法是将 Reverse 与 Join 结合使用。但是以前的方法应该很快
string.Join("", array.Reverse())
是的,反转可枚举快很多。
例如:
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();
我需要在开头插入字符串。现在我使用 StringBuilder.Insert(0, stringToInsert)
在前面插入,但这会花费很多时间(80,000 个字符串大约需要 2 分钟)。
append()
方法运行得更快(80,000 个字符串需要 30 秒),但这不是我需要的顺序。如何反转字符串的顺序(而不是字符串本身)并减少插入时间?
假设你可以将它们放入一个数组中,并且如果你有足够的内存,没有什么可以阻止你这样做,使用索引以相反的顺序迭代字符串数组,然后使用追加。这应该真的很快。
StringBuilder s = new StringBuilder()
for(i = array.Length - 1; i >= 0; i--)
{
s.Append(array[i]);
}
另一种方法是将 Reverse 与 Join 结合使用。但是以前的方法应该很快
string.Join("", array.Reverse())
是的,反转可枚举快很多。
例如:
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();