扩展阵列,以检查它是否在斯威夫特排序? [英] Extending Array to check if it is sorted in Swift?
问题描述
我要扩展Array类,以便它可以知道是否是排序(升序)或没有。我想添加一个名为 isSorted
一个计算属性。我怎么能说出数组的元素具有可比性?
I want to extend Array class so that it can know whether it is sorted (ascending) or not. I want to add a computed property called isSorted
. How can I state the elements of the Array to be comparable?
我的游乐场目前执行
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
错误 找不到过载'>'接受提供的参数
当然,我仍然有一个错误,因为斯威夫特不知道怎么的元素进行比较。我怎样才能实现这个扩展斯威夫特?还是我做错了什么吗?
Of course, I still got an error because Swift doesn't know how to compare the elements. How can I implement this extension in Swift? Or am I doing something wrong here?
推荐答案
的替代解决方案免费功能是做什么斯威夫特的内置中的Array.sort
和 Array.sorted
方法做的,需要你传递一个比较合适的方法:
The alternative solution to a free function is to do what Swift's built-in Array.sort
and Array.sorted
methods do, and require that you pass a suitable comparator to the method:
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
这篇关于扩展阵列,以检查它是否在斯威夫特排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!