使用高阶函数排序:将一个元素赋予优先级

时间:2019-07-15 12:25:40

标签: swift sorting higher-order-functions

具有无序的整数数组,例如:

let numbers = [4, 3, 1, 5, 2]

在Swift中,是否可以使用.sorted {}对具有优先级的项排序并放置在数组的第一个索引中的数组。因此,不用返回[1,2,3,4,5],我们可以获得[3,1,2,4,5]?

1 个答案:

答案 0 :(得分:4)

您可以这样声明一个函数:

func sort(_ array: [Int], prioritizing n: Int) -> [Int] {
    var copy = array
    let pivot = copy.partition { $0 != n }
    copy[pivot...].sort()
    return copy
}

使用partition(by:)函数。

您可以这样使用它:

let numbers = [4, 3, 1, 5, 2]
let specialNumber = 3
sort(numbers, prioritizing: specialNumber) //[3, 1, 2, 4, 5]

以下是一些测试用例:

sort([3, 3, 3], prioritizing: 3)           //[3, 3, 3]
sort([9, 4, 1, 5, 2], prioritizing: 3)     //[1, 2, 4, 5, 9]

这里是仅使用sorted(by:)的替代解决方案:

let numbers = [4, 3, 1, 5, 2]
let vipNumber = 3
let result = numbers.sorted {
    ($0 == vipNumber ? Int.min : $0) < ($1 == vipNumber ? Int.min : $1)
}
print(result)                              //[3, 1, 2, 4, 5]