【问题标题】:How can I sort one array based on another array positions in swift?如何快速根据另一个数组位置对一个数组进行排序?
【发布时间】:2017-08-10 14:42:16
【问题描述】:

在 Swift 中,假设我有两个数组:

var array1: [Int] = [100, 40, 10, 50, 30, 20, 90, 70]
var array2: [Int] = [50, 20, 100, 10, 30]

我想按照 array2 对我的 aary1 进行排序

所以我的 array1 的最终输出将是: // array1 = [50, 20, 100, 10, 30, 40, 90, 70]

【问题讨论】:

标签: arrays swift sorting


【解决方案1】:

即使您的问题措辞含糊,但从您的示例来看,您真正想要的是两个数组的并集,较小数组的元素首先进入,然后是较大数组的唯一元素此数组末尾的未更改顺序。

下面的代码实现了例子的结果:

let combined = array2 + array1.filter{array2.index(of: $0) == nil}

【讨论】:

  • 它确实有效,因为它保留了两个数组的唯一元素。这个问题没有指定如果没有一个数组是另一个数组的子集,那么排序应该是什么,所以在这种情况下,它们只是被连接起来。
  • @LucaAngeletti 这是对这个人的一般评论,实际上是他,因此我没有标记你。
【解决方案2】:

您尚未定义您希望array1 中的元素如何排序,但未定义array2 中的元素。此解决方案假定您要按数值对那些未找到的元素进行排序:

var array1 = [100, 40, 10, 50, 30, 20, 90, 70]
var array2 = [50, 20, 100, 10, 30]

array1.sort {
    let index0 = array2.index(of: $0)
    let index1 = array2.index(of: $1)

    switch (index0, index1) {
    case (nil, nil):
        return $0 < $1
    case (nil, _):
        return false
    case (_, nil):
        return true
    default:
        return index0! < index1!
    }
}

print(array1) // [50, 20, 100, 10, 30,    40, 70, 90]
              //                          ^ order not defined in array2

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多