我有一个字符串格式的坐标列表,分别具有经度和纬度。我想要纬度和THEN经度:
var str = "POLYGON ((-97.7157864909859 30.406523563068, -97.7165355983688 30.4068866173208, -97.7167879301601 30.406495457696, -97.7168046574092 30.4065112735542, -97.7168203607564 30.406527859154, -97.7168349935064 30.4065451649171))
我已经删除了其格式的字符串:
let formattedString = str.replacingOccurrences(of: "POLYGON ((", with: "").replacingOccurrences(of: "))", with: "").replacingOccurrences(of: ",", with: "")
var token = formattedString.components(separatedBy: " ")
现在,我正在尝试翻转经度和纬度的位置,以使其:
30.406523563068, -97.7157864909859, 30.4068866173208, -97.7157864909859
我已经尝试了以下方法,但是它似乎并没有改变阵列的配置:
var coordinateArray = [String]()
for (index, coordinate) in token.enumerated() {
if index % 2 == 0 {
coordinateArray.insert(coordinate, at: index)
} else {
coordinateArray.insert(coordinate, at: index)
}
}
任何帮助将不胜感激。
答案 0 :(得分:4)
这是一种更具实用性的方法:
let str = "POLYGON ((-97.7157864909859 30.406523563068, -97.7165355983688 30.4068866173208, -97.7167879301601 30.406495457696, -97.7168046574092 30.4065112735542, -97.7168203607564 30.406527859154, -97.7168349935064 30.4065451649171))"
let formattedString = str.replacingOccurrences(of: "POLYGON ((", with: "").replacingOccurrences(of: "))", with: "")
// split by commas, not spaces, because in the original string, pairs of
// coordinates are separated by commas
let coordianates = formattedString.components(separatedBy: ", ")
// Here I transform each pair of coordinate into an array with two elements,
// reverse it, and flatten the whole array
let flipped = coordianates.flatMap { $0.components(separatedBy: " ").reversed() }
print(flipped)
答案 1 :(得分:4)
您可能想使用swapAt
函数尝试此操作,
var arr = [30.406523563068, -97.7157864909859, 30.4068866173208, -54.881838371711]
for(index, _) in arr.enumerated() {
if index % 2 == 0 && index + 1 < arr.count {
arr.swapAt(index, index + 1)
}
}
print(arr)
答案 2 :(得分:3)
使用swapAt(_:_:)
示例:
var names = ["Paul", "John", "George", "Ringo"]
names.swapAt(0, 1)
这会将"Paul"
与数组中的"John"
交换。
满足您的特定需求
var str = "POLYGON ((-97.7157864909859 30.406523563068, -97.7165355983688 30.4068866173208, -97.7167879301601 30.406495457696, -97.7168046574092 30.4065112735542, -97.7168203607564 30.406527859154, -97.7168349935064 30.4065451649171))"
let formattedString = str.replacingOccurrences(of: "POLYGON ((", with: "").replacingOccurrences(of: "))", with: "").replacingOccurrences(of: ",", with: "")
var coordinateArray = formattedString.components(separatedBy: " ")
for i in stride(from: 0, to: coordinateArray.endIndex - 1, by: 2) {
coordinateArray.swapAt(i, i+1)
}
答案 3 :(得分:1)
如果您的ordinateArray看起来像这样
[-97, 30, -97, 30]
然后您可以说您要每两个元素滑动一次。然后,您需要使用stride
方法,该方法为您提供数组中元素的第二个索引(从0开始),然后您可以使用swapAt
方法,该方法将元素与第二个索引交换,并将元素与后面的索引交换
for index in stride(from: coordinateArray.startIndex, to: coordinateArray.endIndex - 1, by: 2) {
coordinateArray.swapAt(index, index + 1)
}