Swift5 将文本文件读入二维数组Int/Doubles
Swift 5 reading a text file into a 2d array of Int/Doubles
我希望这对小组来说不是一个太简单的问题。我正在自学 Swift 但我真的很难找到一种方法来将包含 Int 和 Double 值混合的 CSV 文本文件读取到位于 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,您会发现错误是第一个无法解析的标记。
我希望这对小组来说不是一个太简单的问题。我正在自学 Swift 但我真的很难找到一种方法来将包含 Int 和 Double 值混合的 CSV 文本文件读取到位于 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,您会发现错误是第一个无法解析的标记。