作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将一个最大 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!)
代码工作正常,但速度非常慢。我需要加快我的代码速度。你知道如何做吗?
非常感谢。
最佳答案
如果不修改原始字符串可能会更有效,并且只使用两个索引(from
和 to
)来遍历字符串:
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/
我是一名优秀的程序员,十分优秀!