我想将自己的排序函数添加到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)
}
}
}
}
}
我需要将Elements从CollectionType约束到Comparable以进行实际排序,我相信那里没有问题。
我遇到的问题是for循环参数:
for(x = 0; x&lt; self.count; x ++){
二元运算符&#39;&lt;&#;不能应用于&#39; Int&#39;类型的操作数和 &#39; Self.Index.Distance&#39;
看起来self.count的类型是Self.Index.Distance,老实说,我甚至不确定它是否与Self.Index的类型相同。
答案 0 :(得分:5)
您只需将这些添加为协议要求即可。因此,您可以要求索引距离 Int
:
Index.Distance == Int
或者您可以更改循环条件:
for (var x = self.startIndex; x < self.endIndex; x++){
(您还需要在此处将协议要求更改为Index == Int
,并删除之前的var x
声明)
或者,有一个集合类型的属性,它正是你在该循环中寻找的东西:
for x in self.indices
此外,您的功能removeAtIndex
和insert
不仅需要CollectionType
,还需要RangeReplaceableCollectionType
。
该功能需要标记为mutating