【发布时间】:2014-08-06 16:18:12
【问题描述】:
在 C# 中,StringBuilder.ToString() 的复杂度是多少?是 O(1)、O(N) 还是别的什么?
【问题讨论】:
-
看看源码你就会知道你需要的一切:referencesource.microsoft.com/#mscorlib/system/text/…
标签: c# big-o stringbuilder
在 C# 中,StringBuilder.ToString() 的复杂度是多少?是 O(1)、O(N) 还是别的什么?
【问题讨论】:
标签: c# big-o stringbuilder
不同的框架版本不同;在旧版本中StringBuilder 直接在string 上工作,因此.ToString() 没有额外费用:它只是直接将数据交给您(这可能意味着过大,但它可以工作);所以 O(1)。
在较新的框架版本中,它使用 char[] 后备缓冲区,所以现在当您 .ToString() 时,它可能需要复制 2 x Length 字节,使其成为 O(N)。
【讨论】:
string?
ToString 遍历当前和所有以前的缓冲区,并将它们全部附加到一个巨大的缓冲区中。