我想扩展 Array 类,以便它可以知道它是否已排序(升序)。我想添加一个名为 isSorted
的计算属性。如何声明数组的元素具有可比性?
我目前在 Playground 中的实现
extension Array {
var isSorted: Bool {
for i in 1..self.count {
if self[i-1] > self[i] { return false }
}
return true
}
}
// The way I want to get the computed property
[1, 1, 2, 3, 4, 5, 6, 7, 8].isSorted //= true
[2, 1, 3, 8, 5, 6, 7, 4, 8].isSorted //= false
错误 找不到接受所提供参数的“>”的重载
当然,我仍然得到一个错误,因为 Swift 不知道如何比较元素。如何在 Swift 中实现此扩展?还是我在这里做错了什么?
最佳答案
自由函数的替代解决方案是执行 Swift 的内置 Array.sort
和 Array.sorted
方法所做的事情,并要求您传递一个合适的比较器方法:
extension Array {
func isSorted(isOrderedBefore: (T, T) -> Bool) -> Bool {
for i in 1..<self.count {
if !isOrderedBefore(self[i-1], self[i]) {
return false
}
}
return true
}
}
[1, 5, 3].isSorted(<) // false
[1, 5, 10].isSorted(<) // true
[3.5, 2.1, -5.4].isSorted(>) // true
关于arrays - 扩展数组以检查它是否在 Swift 中排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24602595/