首页 > 解决方案 > 快速重新排序二维数组

问题描述

我有一个填充了 cllocationcoordinate 对象的数组,我想从第一个元素遍历数组到最后一个元素,问题是我想像这样重新排序数组。

 start element = s 
 even element = e 
 odd element = o 

 order -> s o o e e o o e e o o ...  

从数字上看,它看起来像

0 1 3 2 4 5 7 6 8 ...

我已经写了一个方法来做到这一点,但它效率低下,我希望看到一个简洁的方法来产生相同的功能

根据要求,这是我目前正在做的事情 - 它有效,但我知道必须有更好的方法。

var inc = 0
       var flightPatternCounter = 0
       var hasResolvedThisIncrement = false
       for i in 0..<edgePointFlattenArrayHolder.count{
           hasResolvedThisIncrement = false
           if i == 0 {
               inc = 0
               hasResolvedThisIncrement = true
           }
           if flightPatternCounter == 0 && hasResolvedThisIncrement == false{
               inc = inc + 1
               flightPatternCounter = flightPatternCounter + 1
               hasResolvedThisIncrement = true
           }
           if flightPatternCounter == 1 && hasResolvedThisIncrement == false{
               inc = inc + 2
               flightPatternCounter = flightPatternCounter + 1
               hasResolvedThisIncrement = true
           }
           if flightPatternCounter == 2 && hasResolvedThisIncrement == false{
               inc = inc - 1
               flightPatternCounter = flightPatternCounter + 1
               hasResolvedThisIncrement = true
           }
           if flightPatternCounter == 3 && hasResolvedThisIncrement == false{
               inc = inc + 2
               flightPatternCounter = 0
               hasResolvedThisIncrement = true
           }
           if inc >= edgePointFlattenArrayHolder.count{
               inc = inc - 1
           }
           finalAutoPathPoints.append(edgePointFlattenArrayHolder[inc])
       }

标签: arraysswift

解决方案


不知道它是否是一个好的解决方案,但您可以通过此设置订单

let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12]
var newArr: [Int] = []
var index = 0
var tempBool = false
while (index <= arr.count - 1)  {
    if index == 0 {
        newArr.append(arr[index])
        index += 1
    } else if index.isMultiple(of: 2) && tempBool {
        if index + 1 <= arr.count - 1 {
            newArr.append(arr[(index + 1)])
        }
        newArr.append(arr[index])
        index += 2
        tempBool = false
    } else {
        newArr.append(arr[index])
        index += 1
        tempBool = true
    }
}
print(newArr) // [0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 11, 10, 12]

推荐阅读