kat*_*000 7 string split divide swift
如何将String
Swift中的给定分成给定长度的组,从右到左阅读?
例如,我有串123456789
3.的和组的长度字符串应该被分为3组:123
,456
,789
.字符串1234567
将分为1
,234
,567
那么,你能在Swift中编写一些不错的代码吗:
func splitedString(string: String, length: Int) -> [String] {
}
Run Code Online (Sandbox Code Playgroud)
BTW试过功能split()
,但据我所知它只能找到一些符号
雨燕4
我改编了Cafedeichi 给出的答案,根据函数参数从左到右或从右到左操作,因此它更通用。
extension String {
/// Splits a string into groups of `every` n characters, grouping from left-to-right by default. If `backwards` is true, right-to-left.
public func split(every: Int, backwards: Bool = false) -> [String] {
var result = [String]()
for i in stride(from: 0, to: self.count, by: every) {
switch backwards {
case true:
let endIndex = self.index(self.endIndex, offsetBy: -i)
let startIndex = self.index(endIndex, offsetBy: -every, limitedBy: self.startIndex) ?? self.startIndex
result.insert(String(self[startIndex..<endIndex]), at: 0)
case false:
let startIndex = self.index(self.startIndex, offsetBy: i)
let endIndex = self.index(startIndex, offsetBy: every, limitedBy: self.endIndex) ?? self.endIndex
result.append(String(self[startIndex..<endIndex]))
}
}
return result
}
}
Run Code Online (Sandbox Code Playgroud)
例子:
"abcde".split(every: 2) // ["ab", "cd", "e"]
"abcde".split(every: 2, backwards: true) // ["a", "bc", "de"]
"abcde".split(every: 4) // ["abcd", "e"]
"abcde".split(every: 4, backwards: true) // ["a", "bcde"]
Run Code Online (Sandbox Code Playgroud)
只是为了将我的参赛作品添加到这个非常拥挤的竞赛中(SwiftStub):
func splitedString(string: String, length: Int) -> [String] {
var result = [String]()
for var i = 0; i < string.characters.count; i += length {
let endIndex = string.endIndex.advancedBy(-i)
let startIndex = endIndex.advancedBy(-length, limit: string.startIndex)
result.append(string[startIndex..<endIndex])
}
return result.reverse()
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您感觉功能齐全:
func splitedString2(string: String, length: Int) -> [String] {
return 0.stride(to: string.characters.count, by: length)
.reverse()
.map {
i -> String in
let endIndex = string.endIndex.advancedBy(-i)
let startIndex = endIndex.advancedBy(-length, limit: string.startIndex)
return string[startIndex..<endIndex]
}
}
Run Code Online (Sandbox Code Playgroud)