您可以将字符串转换为字符数组,并使用__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)
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |