Обратный цикл for массива

#swift #xcode #coordinates #mapkit

#swift #xcode #координаты #mapkit

Вопрос:

Я пытаюсь создать функцию, которая должна вычислять координату в 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) Я должен начать вычислять от последнего индекса массива обратно к первому…

возможно ли это?

Спасибо

Ответ №1:

Как следует из названия, вы можете обратить массив только с reversed() помощью .

Ваш код довольно похож на objective-c. Лучшим способом перечисления массива является быстрое перечисление, потому что вам на самом деле не нужен индекс.

 for coord in arrayLocations { ...
 

и

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

Однако есть еще более быстрый способ map проверки массивов

 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)")        
}
 

Ответ №2:

решаемая:

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

 

Я использую обратный индекс, чтобы начать с конца…

Комментарии:

1. Почему не просто for i in (0..<polypoint).reversed() ?