反转数组的 for 循环

问题描述

我正在尝试创建一个函数来计算每个给定坐标的 90 度和 270 度坐标..

并保存在一个arrayLocationOffset数组中

var arrayLocations : [CLLocationCoordinate2D] =
    [
     CLLocationCoordinate2D(latitude: 45.15055543976834,longitude: 11.656891939801518 ),CLLocationCoordinate2D(latitude: 45.154446871287924,longitude: 11.66058789179949),]
// simplify only 2 coordinate

我使用这个 for 循环来执行操作:

 func createCoordinatepoly() {
        let polypoint = arrayLocations.count
     
        for i in 0..<polypoint {
          
            let coord = arrayLocations[i]
            
            // calc LH
            
            let lhCoord = coord270(coord: coord)
            
            arrayLocationOffset.append(lhCoord)
            
        }
        
        for i in 0..<polypoint { // shuld revers this for loop and get first the last index
            
            let coord = arrayLocations[i]
            
            // calc LH
            
            let RhCoord = coord90(coord: coord)
            
            arrayLocationOffset.append(RhCoord)
            
        }
        
        debugPrint("aggiunto array poly \(arrayLocationOffset.count)")
        
    }

arrayLocationOffset 必须具有特定的序列,否则我无法在 Mapkit 中正确绘制多边形。 为了获得第二个 forLoop(我计算 RHside 的位置)的特定顺序,我应该从最后一个数组索引开始计算回到第一个...

这可能吗?

谢谢

解决方法

顾名思义,您只需使用 reversed() 即可反转数组。

你的代码相当objective-c-ish。枚举数组的更好方法是快速枚举,因为您实际上不需要索引。

for coord in arrayLocations { ...

for coord in arrayLocations.reversed() { ...

然而,还有一种更快捷的方法mapping 数组

func createCoordinatePoly() {
    arrayLocationOffset.append(contentsOf: arrayLocations.map{coord270(coord: $0)})
    arrayLocationOffset.append(contentsOf: arrayLocations.reversed().map{coord90(coord: $0)})    
    debugPrint("aggiunto array poly \(arrayLocationOffset.count)")        
}
,

已解决:

var reversIndex = polypoint-1
        for _ in 0..<polypoint {
            
            let coord = arrayLocations[reversIndex]
            
            // calc LH
            
            let RhCoord = coord90(coord: coord)
            
            arrayLocationOffset.append(RhCoord)
            reversIndex -= 1
        }

我使用反向索引从末尾开始...