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

the*_*end 2 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)
                }
            }
        }
    }
}
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类型相同.

ois*_*sdk 5

您只需将这些添加为协议要求即可.因此,您可以要求索引距离 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)

此外,您的功能removeAtIndexinsert要求不仅仅是一个CollectionType,而是一个RangeReplaceableCollectionType.

并且需要标记该功能 mutating