是否可以将<,>
运算符传递给函数以更改sortInPlace
调用?而不是复制此函数并更改>
或手动检查另一个参数并使用条件逻辑进行排序。
mutating func sortTasksPriorityAscending() {
self.tasks.sortInPlace {$0.priority > $1.priority}
}
答案 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: <)