将排序函数添加到CollectionType(数组)

时间:2015-07-05 01:16:27

标签: swift swift2

我想将自己的排序函数添加到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的类型相同。

1 个答案:

答案 0 :(得分:5)

您只需将这些添加为协议要求即可。因此,您可以要求索引距离 Int

Index.Distance == Int 

或者您可以更改循环条件:

for (var x = self.startIndex; x < self.endIndex; x++){

(您还需要在此处将协议要求更改为Index == Int,并删除之前的var x声明)

或者,有一个集合类型的属性,它正是你在该循环中寻找的东西:

for x in self.indices

此外,您的功能removeAtIndexinsert不仅需要CollectionType,还需要RangeReplaceableCollectionType

该功能需要标记为mutating