gpt4 book ai didi

ios - 使用 Swift 将字符串拆分为 64kb

转载 作者:行者123 更新时间:2023-11-29 02:17:45 25 4
gpt4 key购买 nike

我想将一个最大 8mb 的超大字符串拆分为 64kb 的 block 。目前我正在使用以下代码:

//1
var regData:String= "string up to 8mb"
var count=((countElements(self.regData!))/65536)

//2
for var index = 0; index < count; ++index {
arr.append(self.regData!.substringWithRange(Range<String.Index>(start: advance(self.regData!.startIndex, 0),end: advance(self.regData!.startIndex, 65536))))
self.regData!.removeRange(Range<String.Index>(start: self.regData!.startIndex, end:advance(self.regData!.startIndex, 65536)))
println(index)
}
//3
println("exit loop")
arr.append(self.regData!)
  1. 我计算我有多少个 64 kb block 。
  2. 在 for 循环中我得到了第一个 64kb。我将它们收集在一个数组中。现在,由于步骤 3,我必须删除前 64kb 字符串。
  3. 如果我的大小小于 64kb,我的循环中就会出现错误。因此我的最后一步是在循环之外。

代码工作正常,但速度非常慢。我需要加快我的代码速度。你知道如何做吗?

非常感谢。

最佳答案

如果不修改原始字符串可能会更有效,并且只使用两个索引(fromto)来遍历字符串:

let regData = "string up to 8mb"
let chunkSize = 65536

var array = [String]()
var from = regData.startIndex // start of current chunk
let end = regData.endIndex // end of string
while from != end {
// advance "from" by "chunkSize", but not beyond "end":
let to = from.advancedBy(chunkSize, limit: end)
array.append(regData.substringWithRange(from ..< to))
from = to
}

请注意,这给出了 65536 个字符 的子字符串。自从 swift 字符代表一个“Unicode 字素簇”,这不会对应64kB的数据。如果你需要,那么你应该转换字符串到 NSData 并将其拆分为 block 。

(针对 Swift 2 进行了更新。)

关于ios - 使用 Swift 将字符串拆分为 64kb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28559715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com