我想将自己的排序函数添加到Arrays中,因此我尝试扩展CollectionType协议以添加此功能.这是我到目前为止:
extension CollectionType where Generator.Element : Comparable, Index : IntegerType{
func psoInsertionSort(){
var key: Generator.Element
var x, y: Int
for (x = 0; x < self.count; x++){
key = self[x]
for (y = x; y >= 0; y--){
if key < self[y]{
self.removeAtIndex(y+1)
self.insert(key, atIndex: y)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要将Elements从CollectionType约束到Comparable以进行实际排序,我相信那里没有问题.
我得到的问题是for循环参数:
for(x = 0; x <self.count; x ++){
二进制运算符'<'不能应用于'Int'和'Self.Index.Distance'类型的操作数
看起来像self.count属于Self.Index.Distance类型,老实说,我甚至不确定它是否与Self.Index类型相同.
您只需将这些添加为协议要求即可.因此,您可以要求索引距离为 Int:
Index.Distance == Int
Run Code Online (Sandbox Code Playgroud)
或者您可以更改循环条件:
for (var x = self.startIndex; x < self.endIndex; x++){
Run Code Online (Sandbox Code Playgroud)
(您还需要在Index == Int此处更改协议要求,并删除之前的var x声明)
或者,有一个集合类型的属性,它具有您在该循环中正在寻找的内容:
for x in self.indices
Run Code Online (Sandbox Code Playgroud)
此外,您的功能removeAtIndex和insert要求不仅仅是一个CollectionType,而是一个RangeReplaceableCollectionType.
并且需要标记该功能 mutating
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |