将数组的顺序更改为与另一个数组SWIFT相同

时间:2015-04-25 15:50:21

标签: arrays swift

我以前见过这个,但似乎无法在index.html中找到它。所以我有两个数组swiftarrayA。我希望arrayB将自己排序为arrayB的相同顺序。例如,她就是数组:

arrayA

由于

2 个答案:

答案 0 :(得分:3)

1)这是我理解的

arrayA定义了某种顺序。在你的例子中,巧合的是整数的升序,但它实际上可以是任何类型的顺序,如下所示:

  1. 示例1:[5,4,1,3,2]按数字升序"名称" (五,四,一,三,二
  2. 示例2:[5,2,4,3,1]:按意大利语编号升序( cinque,due,quattro,tre,uno
  3. 2)您不喜欢这种解决方案

    arrayB = arrayA
    

    你实际上需要一种方法来移动 arrayB中的元素,以便将它排序为arrayA(可能是因为你需要一个更通用的问题的解决方案,其中数组的元素不是简单的整数)。

    3)现在,我的解决方案

    var arrayA = [1, 2, 3, 4, 5]
    var arrayB = [4, 5, 1, 2, 3]
    
    var indexes = [Int: Int]()
    for (index, elm) in enumerate(arrayA)  {
        indexes[elm] = index
    }
    
    // now indexes[i] gives me the position of the integer i inside arrayA, e.g. indexes[3] -> 2
    
    arrayB.sort { return indexes[$0] < indexes[$1] }
    
    // now arrayB has been sorted as arrayA
    

    <强>结论

    这种方法适用于:

    1. arrayA(或arrayB)
    2. 中没有重复项
    3. arrayA.count == arrayB.count
    4. arrayA和arrayB包含相同的元素
    5. 如果您正在寻找,请告诉我。

答案 1 :(得分:-1)

我认为你只需要使用reverse()函数。

var arrayA = [1,2,3,4,5]

arrayB = reverse(arrayA)

将导致arrayB = [5,4,3,2,1],反之亦然。