【问题标题】:Reverse Array of coordinates in swift 4swift 4中的反向坐标数组
【发布时间】:2019-09-24 23:13:39
【问题描述】:

我正在尝试反转坐标数组。我有这个数组:

[
            [
                9.211615025997162,
                44.30419567985762
            ],
            [
                9.21164184808731,
                44.30412081929745
            ],
            [
                9.21165257692337,
                44.304053636662175
            ],
            [
                9.211606979370117,
                44.3038789614507
            ],
            [
                9.211572110652924,
                44.30381945658962
            ],
            [
                9.211539924144745,
                44.30378874437967
            ],
            [
                9.211507737636566,
                44.30376187118276
            ],
            [
                9.211564064025879,
                44.30377530778277
            ],
            [
                9.211574792861937,
                44.30374075651943
            ],
            [
                9.211574792861937,
                44.30371388330059
            ],
            [
                9.211574792861937,
                44.30369852717
            ],
            [
                9.21154797077179,
                44.303665895379176
            ],
            [
                9.211513102054596,
                44.303650539236024
            ],
            [
                9.211429953575134,
                44.30358911462331
            ],
            [
                9.211349487304688,
                44.30355840229286
            ],
            [
                9.211271703243256,
                44.303537287556324
            ],
            [
                9.21117514371872,
                44.30349505806051
            ],
            [
                9.211151003837585,
                44.303473943301235
            ],
            [
                9.211126863956451,
                44.30342979423452
            ],
            [
                9.211145639419556,
                44.30339908182071
            ],
            [
                9.211183190345764,
                44.303368369390846
            ],
            [
                9.211223423480988,
                44.30331846165803
            ],
            [
                9.211242198944092,
                44.30327623200479
            ],
            [
                9.211177825927734,
                44.30325895622883
            ],
            [
                9.211030304431915,
                44.303228243725634
            ],
            [
                9.210925698280334,
                44.30321096793552
            ],
            [
                9.210874736309052,
                44.303197531206386
            ],
            [
                9.210831820964813,
                44.303197531206386
            ],
            [
                9.21075403690338,
                44.303197531206386
            ],
            [
                9.21068161725998,
                44.3031994507393
            ],
            [
                9.210577011108398,
                44.3031994507393
            ],
            [
                9.210509955883026,
                44.303207128870355
            ],
            [
                9.210440218448639,
                44.303207128870355
            ],
            [
                9.210370481014252,
                44.30322632419366
            ],
            [
                9.2102712392807,
                44.30324743904202
            ],
            [
                9.210190773010254,
                44.30328199059568
            ],
            [
                9.210112988948822,
                44.30328391012582
            ],
            [
                9.210059344768524,
                44.303297346835215
            ],
            [
                9.209954738616943,
                44.30332422024474
            ],
            [
                9.209901094436646,
                44.303339576473235
            ],
            [
                9.209868907928467,
                44.303349174114
            ],
            [
                9.209858179092407,
                44.30338372560779
            ],
            [
                9.209791123867035,
                44.30340292087333
            ],
            [
                9.209697246551514,
                44.30342595518367
            ],
            [
                9.209648966789246,
                44.3034509090097
            ],
            [
                9.209606051445007,
                44.30351809233474
            ],
            [
                9.209579229354858,
                44.30355840229286
            ],
            [
                9.209581911563873,
                44.3035852755829
            ],
            [
                9.209622144699097,
                44.30355840229286
            ],
            [
                9.20967847108841,
                44.30355648277167
            ],
            [
                9.209697246551514,
                    44.30354112659989
                ]
]

我想反转坐标,现在在 Long-Lat 到 Lat-Long 中,因此反转整个数组或数组中的每个项目都可以在这里完成工作。我一直试图让它工作,尝试arrayOfCoords.reversed().reverse()之类的东西无济于事。那么我该怎么做呢?

【问题讨论】:

  • 我是一个 javascript 人,不是 swift。我的想法是在 array[i] 的每个项目中运行一个循环并将后一个数字添加到开头,然后砍掉最后一个数字。在 js 中我会 array[i]unshift(array[i][1]);然后数组[i].pop;授予不同的语言,但如果你能在 swift 中找到这些方法的等价物,它应该可以工作,你不必存储任何东西。
  • 最好的解决方案是为您的坐标使用一个结构,可以是自定义结构,也可以是内置的 CLLocationCoordinate2D。这将使您的代码更清晰。

标签: arrays swift swift4 reverse


【解决方案1】:

可能有更优雅/更有效的方式来做到这一点,但我会考虑使用compactMap

let testArray = [[1.123,2.22], [3.11, 4.0], [5.21, 6.19]]
print(testArray)

[[1.123, 2.22], [3.11, 4.0], [5.21, 6.19]]

let flippedElementArray = testArray.compactMap { $0.count > 1 ? [$0[1], $0[0]] : nil }
print(flippedElementArray)

[[2.22, 1.123], [4.0, 3.11], [6.19, 5.21]]

$0.count > 1 检查只是确保您至少有 2 个元素,因此您不会收到边界错误。如果不是,则闭包对该元素返回 nil,这将被 compactMap 过滤掉。否则,它返回一个新的数组元素,该元素由第二个元素后跟第一个元素组成。所有这些元素都存储在最终的映射数组 (flippedElementArray) 中。

【讨论】:

    【解决方案2】:
    arrayOfCoords.map{ Array($0.reversed()) }
    

    我假设您想要反转每个坐标对,但将坐标对本身保持在原始顺序。由于您有一个数组数组,因此您必须分别对每个子数组进行操作。而reversed() 返回的是 ReversedCollection 而不是 Array,因此您必须将其重新初始化为数组才能正确使用。

    【讨论】:

    • 这看起来应该和我的解决方案用更少的代码做同样的事情,但我注意到它打印为:[Swift.ReversedCollection>(_base: [ 1.123, 2.22]), Swift.ReversedCollection>(_base: [3.11, 4.0]), Swift.ReversedCollection>(_base: [1.22, 32.2] ), Swift.ReversedCollection>(_base: [5.21, 6.19])] 知道如何将其清理为普通的数组数组吗?我猜元素数组实际上并没有反转,只是被标记为在访问时被视为反转。
    猜你喜欢
    • 2018-04-02
    • 2022-01-02
    • 1970-01-01
    • 2021-09-24
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多