ios - 我可以在 Swift 闭包中使用多个分隔符拆分数字字符串吗?

标签 ios arrays swift closures

我有一个包含小数和小数的字符串数组。

    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/

相关文章:

javascript - 将嵌套数组连接到向量?

swift - 在 swift 3.0 中解析字典

swift - 命中 fatal error : unexpectedly found nil while unwrapping an Optional value (lldb)

ios - 新手 : Drawing an OpenGL ES shape using an ordered vertex array

ios - 使用 UISearchController 和 Objective-C 搜索 UITableView 而不是 UITableViewController

ios - Swift:在展开可选值时意外发现 nil

ios - 如何使用 Linphone 获取当前通话状态

ios - UITableViewCell 附件未随 searchResults 更新

mysql - Codeigniter - 输入后数组插入 mysql 数据库

javascript - 通过基于 Javascript 中第一个数组的元素分组来合并两个数组