SWIFT: uppercaseString 的表现

SWIFT: performance of uppercaseString

我有一个大文件 (25 MB) 的文本。我将它读入 NSString 变量。我想使用 "uppercaseString" 将每个字符转换为大写。但是这个功能非常慢,需要几分钟。 有什么技巧可以让它工作得更快吗?

添加代码:

if let path = NSBundle.mainBundle().pathForResource("GERMANU", ofType: "txt") {
    var error: NSError?
    if let data = NSData(contentsOfFile: path, options: NSDataReadingOptions(), error: &error) {           
        if let datastring = NSString(data: data, encoding: NSMacOSRomanStringEncoding) {
            var upper = datastring.uppercaseString
 ...

这是有效的代码,但速度很慢。始终只需要最后一行。

String::uppercaseString是瞬时的;创建字符串不是。

 # Long time
 12> var st : String = "".join(Array(count:25000000, repeatedValue: "a")) 
st: String = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..."

 # Short time
 13> st.uppercaseString
$R8: String = "AAAAAAAAAAAAAAAAAAAAAAAAAAAA..."

鉴于您使用的是 Roman 编码,转换为大写可能并非易事。也许您可以尝试另一种编码(如果有其他合适的编码)?您可以尝试 init?(... usedEncoding ...) 变体并对结果调用 fastestEncoding 来探索一下。

注意:您可以使用特定编码直接从文件创建 Swift 字符串:

if let datastring = String(contentsOfFile: path, encoding: ... , error: &error) {
  var upper = datastring.uppercaseString
}

对我来说,它看起来像是一个糟糕的库实现。使用 NSString.uppercaseString() 真的很快(半秒)。所以我会使用它,但我正在 Swift 中开发,因为我喜欢这种语言。所以我不想切换回旧的东西。