首页 > 解决方案 > Swift 5 将文本文件读入 Int/Doubles 的二维数组

问题描述

我希望这对小组来说不是一个太简单的问题。我正在自学 Swift,但我真的很难理解如何将包含 Int 和 Double 值混合的 CSV 文本文件读取到 2d 数组中,该数组位于 Class 内,其中数组中的每一行代表一行从输入文件。我已经成功加载了一维字符串数组,每个元素对应于 CSV 文件中的一行文本。但是我想通过直接从输入文件到二维小数数组来节省时间。

标签: arraysswiftcsvnumeric

解决方案


读入数据。将文本分成几行。将行分隔为标记。将每个标记转换为 Int,如果失败,则转换为 Double。

我假设您知道如何读取文件,所以这里是一个带有静态 CSV 字符串的示例:

let text = """
 1,2,3.0
 4,5.0,6,z
 """

enum CustomError: Error {
  case notAnItOrADouble(String)
}

do {
  let numberRows = try text
    .split(separator: "\n")
    .map { line in
      try line.split(separator: ",").map { substring -> Any in
        let token = String(substring)
        guard let value: Any = Int(token) ?? Double(token) else {
          throw CustomError.notAnItOrADouble(token)
        }
        return value
      }
  }

  numberRows.forEach { row in
    row.forEach { number in
      print("\(number) is \(type(of: number))")
    }
  }
} catch (let error) {
  print(error)
}

输出:

1 is Int
2 is Int
3.0 is Double
4 is Int
5.0 is Double
6 is Int

尝试输入一个字符串而不是一个 int 或 double ,你会发现你得到的错误是他的第一个不可解析的令牌。


推荐阅读