【发布时间】:2021-09-08 16:12:45
【问题描述】:
我有一个包含数千个地理坐标列表的字符串
“[8.2627925,46.3460497],[8.2612673,46.3457009],[8.2602494,46.3453934],...”
并希望将它们全部提取到 CGPoints 数组中。 我今天使用的代码如下:
let coords=[CGPoint]()
while substring.contains("[")
{
index = substring.index(of: "[")!
substring = substring[index...]
index = substring.index(of: "]")!
let coordinate = substring[..<index]
var indexComma = coordinate.index(of: ",")!
let coordX = String(coordinate[..<indexComma])
indexComma = coordinate.index(indexComma, offsetBy: +1)
let coordY = String(coordinate[indexComma...])
coords.append(CGPoint(x: CGFloat(Double(coordX)!), y: CGFloat(Double(coordY)!)))
substring = substring[index...]
}
但是我确信它可以优化,可能使用正则表达式。什么是最有效的方法?
【问题讨论】:
-
看起来几乎像 JSON,如果你用 "[""] 括起来的话。我会先这样解码......你真的需要正则表达式吗?否则:
let arrayOfPoints = try? JSONDecoder().decode([[Double]].self, from: Data(("[" + pointsStr + "]").utf8); let arrayOfCGPoints = arrayOfPoints.map { CGPoint(x: $0[0], y: $0[1]) } -
看起来不像,但如果这是有效的 GeoJSON,您可以使用 MKGeoJSONDecoder 解析它
-
1.一次删除所有 [ 和 ] 实例。 2. 获取以逗号分隔的组件数组。 3. 遍历数组并将每个元素保存在坐标中。
-
有人能帮我理解为什么减票吗?