【问题标题】:Asymptotic complexity of string indexing in .NET.NET 中字符串索引的渐近复杂度
【发布时间】:2014-12-12 15:16:25
【问题描述】:

由于 .NET 以 UTF-16 存储字符串,并且考虑到它是可变长度编码的事实(单个代码单元可以占用 2 或 4 个字节)。

这是否意味着字符串索引 (s[n]) 需要 O(n)?

【问题讨论】:

  • 不,索引字符串会产生 System.Char,而不是可以存储上层代码点的类型。

标签: .net string asymptotic-complexity


【解决方案1】:

.Net 字符串不将非 BMP 代码单元视为单个字符;字符串 API 将代理对作为两个字符返回。

因此,就string而言,UTF-16不是变长编码。

如果您想查看 UTF-32 代码单元,请调用 Char.GetNumericValue(),即 O(n)。

【讨论】:

  • 公平地说 .NET 字符串是 UCS-2 而不是 UTF-16?
  • @BrankoDimitrijevic:是的
  • 这可以更好的措辞。 .NET确实在许多需要这样做的地方(整理、呈现等)完全支持 UTF-16 代理对。 String 不支持它。
  • @CoryNelson:澄清。
猜你喜欢
  • 2010-10-25
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多