如何通过给定大小的块从字符串拆分到数组

Naz*_*san 1 ios swift swift4

我想按给定大小的块分割字符串 2

示例:

字符串"1234567"和输出应该是["12", "34", "56","7"]

Leo*_*bus 6

您可以将字符串转换为字符数组,并使用__CODE__方法每n个元素迭代字符并使用map返回它们:

extension Collection {
    func group(of n: Int) -> [SubSequence] {
        var startIndex = self.startIndex
        let count = self.count
        let end = count/n + count % n
        return (0..<end).map { _ in
            let endIndex = index(startIndex, offsetBy: n, limitedBy: self.endIndex) ?? self.endIndex
            defer { startIndex = endIndex }
            return self[startIndex..<endIndex]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
let numbers = "1234567"
let grouped = numbers.group(of: 2)
print(grouped)    // ["12", "34", "56", "7"]
Run Code Online (Sandbox Code Playgroud)

编辑/更新:

如果要将最后一组字符附加到结果数组的最后一个元素,则需要检查结果数组中是否存在最后一个元素,以及每个字符串字符数是否小于附加每个元素之前的组大小结果:

extension Collection {
    func group(of n: Int) -> [SubSequence] {
        var startIndex = self.startIndex
        let count = self.count
        return (0..<count/n ).map { _ in
            var endIndex = index(startIndex, offsetBy: n, limitedBy: self.endIndex) ?? self.endIndex
            if count % n > 0, distance(from: self.startIndex, to: startIndex) > (count / n) {
                endIndex = self.endIndex
            }
            defer { startIndex = endIndex }
            return self[startIndex..<endIndex]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
let numbers = "1234567"
let grouped = numbers.group(of: 2)
print(grouped)    // ["12", "34", "567"]
Run Code Online (Sandbox Code Playgroud)