【问题标题】:Changing the order of an array to be the same as another array SWIFT将数组的顺序更改为与另一个数组 SWIFT 相同
【发布时间】:2015-04-25 15:50:21
【问题描述】:

我已经看到这已经完成,但似乎无法在 swift 中找到它。所以我有两个数组,arrayAarrayB。我希望arrayB 将自己排序为与arrayA 相同的顺序。所以例如她是数组:

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

谢谢

【问题讨论】:

  • 您要按增减排序吗?
  • 如果你想让它们一样,为什么不直接复制呢?数组A = 数组B?
  • 你的问题我还不清楚,但是这可能就是你要找的:stackoverflow.com/questions/29432656/…
  • @HenryBrown:如果它们具有相同的元素,那么您可以简单地分配arrayB = arrayA
  • 这个问题被认为是 Stack Overflow 上最不清楚或最不必要的问题。

标签: arrays swift


【解决方案1】:

1) 这是我的理解

arrayA 定义了某种顺序。在您的示例中,它恰好是整数的升序,但它实际上可以是任何一种顺序,例如以下之一:

  1. 示例 1:[5, 4, 1, 3, 2] 按数字“名称”升序(五、四、一、三、二
  2. 示例 2:[5, 2, 4, 3, 1]:按意大利数字名称升序(cinque、due、quattro、tre、uno​​

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. arrayA.count == arrayB.count
  3. arrayA 和 arrayB 包含相同的元素

如果这是您要找的,请告诉我。

【讨论】:

  • 是的!完美的!谢谢你正是我想要的!
  • 很高兴能帮上忙 :-)
【解决方案2】:

我认为您只需要使用reverse() 函数即可。

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

arrayB = reverse(arrayA)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多