如何快速交换 NSArray 元素

Posted

技术标签:

【中文标题】如何快速交换 NSArray 元素【英文标题】:How to swap NSArray elements in swift 【发布时间】:2017-03-25 08:09:40 【问题描述】:

我有一个 NSArray 声明为

var GetVehicleData :NSArray!

这是我存储在数组中的 Json 数据,


      "vehicle": "1",
      "plate_no": "1111111111",
      "vehicle_id": 1,
      "pro_pic": "1490258953381.jpg",
      "fname": "Test",
      "lname": "User 01",
      "phone": "+9476112282334",
      "passenger_no": 4,
      "model": "honda",
      "colour": "red",
      "driver_id": "3",
      "lat": "6.8964",
      "lng": "79.8885"
    ,
    
      "vehicle": "2",
      "plate_no": "CAQ-1234",
      "vehicle_id": 2,
      "pro_pic": "1490258754529.jpg",
      "fname": "Test",
      "lname": "User 2",
      "phone": "+9477789424897",
      "passenger_no": 4,
      "model": "Honda",
      "colour": "Black",
      "driver_id": "4",
      "lat": "6.8876886",
      "lng": "79.8628148"
    ,
    
      "vehicle": "3",
      "plate_no": "FGH-1234",
      "vehicle_id": 3,
      "pro_pic": "1490258812119.jpg",
      "fname": "Test ",
      "lname": "User 3",
      "phone": "+9476533142335",
      "passenger_no": 1,
      "model": "TVS",
      "colour": "red",
      "driver_id": "6",
      "lat": "6.8876901",
      "lng": "79.8628141"
    

现在我想根据我从谷歌矩阵 API 获得的距离数据交换这些元素。例如,如果我想用它的第一个索引元素交换这个数组的第二个索引元素,我应该怎么做?

我试过了,

swap(&GetVehicleData[1], & GetVehicleData[2])

但它给了我这个错误,

Cannot pass immutable value as inout arguments: subscript is get-only

【问题讨论】:

【参考方案1】:

(编辑:以下是我对该问题的原始答案,它在技术上仍然准确,但请注意,除非您特别需要 NSArray/NSMutableArray,否则 vadian 建议使用 Swift 数组会更好。)

您不能编辑 NSArray,请改用 NSMutableArray:

var GetVehicleData :NSMutableArray!

【讨论】:

谢谢,这很有帮助!必须了解这些数组之间的差异。 @Bishan,感谢您接受的答案-但是对于一般用途,我认为 vadian 的答案(使用 Swift 数组)更好(除非您非常具体地需要使用 NSArray/NSMutableArray)并且您可能想要把你的蜱虫移给他。我也将按照这些思路编辑我的答案。【参考方案2】:

使用 Swift 数组,var 可以免费获得可变性:

var GetVehicleData : [[String:Any]]!

【讨论】:

以上是关于如何快速交换 NSArray 元素的主要内容,如果未能解决你的问题,请参考以下文章

快速排序算法的最大和最小交换量

交换排序—快速排序(Quick Sort)

算法交换排序——快速排序+冒泡排序

如何使用快速枚举修改 NSArray 的字符串元素? [复制]

排序2:快速排序

交换机如何配置快速生成树协议