NSString的高效字符处理

Efficient character processing of NSString

我需要对 Cocoa 中的大字符串进行一些字符处理(来自 Objective-C 或 Swift),其中:

为了示例,假设处理是 rot13 混淆。

我想做 space 并且时间高效:

我想要space复杂度≤2*n+O(1)。

我想要时间复杂度 O(n) - 常数越小越好。

NSString API 可以轻松做到这一点,但效率太低,需要大量的字符到字符串的来回转换。我这里追求的是C级高效的字符处理

NSString API 还允许使用 dataUsingEncoding:UTF8String 等方法获取字符缓冲区。但是我找不到使用 API 的方法,我只复制一次字符进行处理。

分配 unichar 的缓冲区。复制到带 getCharacters(range:) 的缓冲区中。操纵。使用 init(charactersNoCopy:length:freeWhenDone:).

转换回来

unichar 是 UTF-16。如果您愿意假设没有任何东西需要代理字符(例如,如果您假设它是 ASCII),那么您可以根据 length (它将是 2 * 长度)分配您的缓冲区。如果你想更灵活,但仍然以 2-3 倍的内存需求为代价的 O(1),那么使用 maximumLengthOfBytes。如果你想更灵活,但愿意接受 O(n) 步骤(我假设你不是),那么使用 lengthOfBytes.

NSString 在内部存储为 UTF-16 有点常见,因此这往往是一个非常快速的转换。也就是说,如果您对字符串有足够的了解,并且愿意编写额外的代码来直接操作编码,那么请查看 fastestEncoding.