我有2个数组:
var locationString = [[String]]()
var doubleArray = [[Double]]()
运行解析器后会追加数组数据,以防万一您想知道为什么没有数据。
基本上,我正在尝试将 locationString 从字符串转换为双精度。 我最初尝试了以下方法:
let doubleArray = locationString.map{ Double($0) }
但这似乎不起作用,因为我得到以下错误:
Cannot invoke initializer for type 'Double' with an argument list of type ((String]))
谢谢您的任何帮助。
答案 0 :(得分:2)
将map
与compactMap
映射一起使用:
let doubleArray = locationString.map { $0.compactMap(Double.init) }
示例:
let locationString = [["1.2", "2.3"], ["3.4", "4.4", "hello"]]
let doubleArray = locationString.map { $0.compactMap(Double.init) }
print(doubleArray) // [[1.2, 2.3], [3.4, 4.4]]
外部map
处理每个字符串数组。内部compactMap
将String
转换为Double
,如果转换返回nil
,则将其丢弃,因为String
不是有效的Double
。
要在转换为String
之前在Double
中修剪开头和结尾的空格,请使用.trimmingCharacters(in: .whitespaces)
:
let doubleArray = locationString.map { $0.compactMap { Double($0.trimmingCharacters(in: .whitespaces )) } }