arrays - Swift 5 将文本文件读入 Int/Doubles 的二维数组
问题描述
我希望这对小组来说不是一个太简单的问题。我正在自学 Swift,但我真的很难理解如何将包含 Int 和 Double 值混合的 CSV 文本文件读取到 2d 数组中,该数组位于 Class 内,其中数组中的每一行代表一行从输入文件。我已经成功加载了一维字符串数组,每个元素对应于 CSV 文件中的一行文本。但是我想通过直接从输入文件到二维小数数组来节省时间。
解决方案
读入数据。将文本分成几行。将行分隔为标记。将每个标记转换为 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 ,你会发现你得到的错误是他的第一个不可解析的令牌。