使用第一个[swift]的排序索引对数组进行排序并更改第二个数组

时间:2015-03-12 22:43:08

标签: ios arrays sorting swift

我有两个数组A和B. 我想知道根据A的排序索引排序数组A和更改B的最有效实现是什么。

到目前为止,我已经解决了以下问题:

  var A = [5.0, 3.0, 7.0, 0.0, 2.0]
  var B = [3.0, 4.0, 5.0, 6.0, 7.0]
  var C = B
  let idxs = sorted(indices(A)) { A[$0] < A[$1] }
  println(idxs)
  for i in 0...A.count-1 {
    C[i] = B[idxs[i]]
  }
  println(C)

2 个答案:

答案 0 :(得分:0)

您可以将两个数组压缩在一起并按第一项排序:

var a = [5.0, 3.0, 7.0, 0.0, 2.0]
var b = [3.0, 4.0, 5.0, 6.0, 7.0]
var c = Array(zip(a, b)) // [(5.0, 3.0), (3.0, 4.0), (7.0, 5.0), (0.0, 6.0), (2.0, 7.0)]

c.sort { $0.0 < $1.0 }   // [(0.0, 6.0), (2.0, 7.0), (3.0, 4.0), (5.0, 3.0), (7.0, 5.0)]

答案 1 :(得分:0)

以下是我为类似问题提出的解决方案:

How to sort 1 array in Swift / Xcode and reorder multiple other arrays by the same keys changes

var names = [ "Paul", "John", "David" ]
var ages  = [  35,    42,     27 ]

let newOrder = names.enumerate().sort({$0.1<$1.1}).map({$0.0})

names = newOrder.map({names[$0]})
ages  = newOrder.map({ages[$0]})