我有一个包含小数和小数的字符串数组。
let stringArray = [ "0.0", "193.16", "5/4", "503.42", "696.58", "25/16", "1082.89", "2/1"]
每个数组元素都映射到一个从字符串中提取数字的闭包中。
let values = stringArray.map { s -> Double in
要么是小数(请参阅 earlier post)
let splitStrings = s.characters.split(separator: "/").map(String.init).map({ Double($0) })
或十进制
let splitStrings = s.characters.split(separator: ".").map(String.init).map({ Double($0) })
问题:在 Swift 中有没有一种方法可以使用多个分隔符拆分字符串,以便单个闭包可以返回小数值或小数值?
(继续关闭)
switch (token)) {
case "/" :
print( "fraction")
let pathA = splitString[0]!/splitString[1]!
return pathA
case "." :
print( "decimal")
let upperSplit = splitString[0]!
let lowerSplit = splitString[1]! * 0.1 // restore decimal point
let pathB = upperSplit+lowerSplit
return pathB
}
}
最佳答案
由多个分隔符分割
使用拆分
swift 4
let s = "[0, 1, 2, 1]"
let splitted = s.characters.split { [",", "[", "]"].contains($0.description) }
swift 3
let s = "[0, 1, 2, 1]"
let splitted = s.characters.split { [",", "[", "]"].contains($0.description) }
swift 2
let s = "[0, 1, 2, 1]"
let splitted = s.characters.split(isSeparator: {[",", "[", "]"].contains($0)}) }
使用字符集
swift 4
let str = "[0, 1, 2, 1]"
let separatorSet = CharacterSet(charactersIn: ",[]")
let comps = str.components(separatedBy: separatorSet)
swift 3
let str = "[0, 1, 2, 1]"
let separatorSet = CharacterSet(charactersInString: ",[]")
let comps = str.components(separatedBy: separatorSet)
swift 2
let str = "[0, 1, 2, 1]"
let separatorSet = NSCharacterSet(charactersInString: ",[]")
let comps = str.componentsSeparatedByCharactersInSet(separatorSet)
无论我们使用什么方法,结果,你都会收到数组。没有信息,用的是哪个分隔符
如果您只需要将 String 转换为 Double 那么
let array = stringArray.compactMap { element -> Double? in
if let value = Double(element) {
return value
}
let parts = element.components(separatedBy: "/")
guard parts.count == 2,
let dividend = Double(parts[0]),
let divisor = Double(parts[1]),
divisor != 0
else {
return nil
}
return dividend / divisor
}
关于ios - 我可以在 Swift 闭包中使用多个分隔符拆分数字字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41336818/