arrays - 快速重新排序二维数组
问题描述
我有一个填充了 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])
}
解决方案
不知道它是否是一个好的解决方案,但您可以通过此设置订单
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]
推荐阅读
- javascript - 倒数计时器不刷新
- javascript - 多个日期选择器 javascript
- rest - gremlin-server neo4j:如何设置 id、多标签
- sql - 运行 SQL 时禁用缓存 - Google Big Query
- testflight - iTMSTransporter 将 ipa 上传到 iTunes Connect Success 但在 TestFlight 中选择 Failed
- python - 如何从条目(Tkinter)中获取值,在公式中使用它并将结果打印在标签中
- docker - 无法连接到位于 unix:///var/run/weave/weave.sock 的 Docker 守护程序。docker 守护进程是否正在运行?
- azure - 访问 Azure 存储库时出现 403 被禁止
- python - 具有不同深度的分层索引的 Pandas 数据框
- ios - 如何去除 UISearchbar 的边框?