传递排序运算符

时间:2016-03-17 12:33:48

标签: swift2

是否可以将<,>运算符传递给函数以更改sortInPlace调用?而不是复制此函数并更改>或手动检查另一个参数并使用条件逻辑进行排序。

mutating func sortTasksPriorityAscending() {
    self.tasks.sortInPlace {$0.priority > $1.priority}
}

1 个答案:

答案 0 :(得分:0)

麻烦是什么???

var arr = [1,2,3,4]
arr.sortInPlace(>)
print(arr) // [4, 3, 2, 1]

在你的情况下,task是一个Task:Comparable的数组,然后只需定义&lt;的正确版本。 例如......

struct S: Comparable {
    var i: Int
}
func <(lhs: S, rhs: S)->Bool {
    return lhs.i < rhs.i
}
func ==(lhs: S, rhs: S)->Bool {
    return lhs.i == rhs.i
}
var arr = [S(i: 2),S(i: 3),S(i: 1)]
arr.sortInPlace(<)
print(arr) // [S(i: 1), S(i: 2), S(i: 3)]
arr.sortInPlace(>)
print(arr) // [S(i: 3), S(i: 2), S(i: 1)]

更新

可能我不理解你的问题?

func foo(arr:[S], sortop: (S,S)->Bool) {
    var arr = arr
    arr.sortInPlace(sortop)
    print(arr)
}

foo(arr, sortop: >)
foo(arr, sortop: <)