2016-09-30 125 views
0

我建立了一个自定义类,它包含一个“内部”数组并提供一些有用的方法。如何在swift中对类型数组进行排序?

class ArrayList<T> { 
    private var array : Array<T> 

    public init() { 
    array = Array<T>() 
    } 

    public func add(element : T) { 
    array.append(element) 
    } 

    public func size() -> Int { 
    return array.count 
    } 

    ... 
} 

好吧,这对我来说工作到目前为止。
但现在我也想有一个方法来排序数组。我已经是这样的:

public func sort(comparator : ?) { 
    array = array.sort(comparator) 
} 

问号代表参数类型,这是我的问题:哪种必须的参数有哪些?我读了一些关于@noescape < >但我无法让它工作!
我正在使用Swift 2.2。

回答

1

最简单的方法是使用标准的闭合

public func sort(comparator : (T, T) -> Bool) { 
    array.sortInPlace(comparator) 
} 

和约束泛型类型为Comparable协议

class ArrayList<T : Comparable> 

然后你可以使用此代码

let arrayList = ArrayList<Int>() 
arrayList.add(5) 
arrayList.add(12) 
arrayList.add(10) 
arrayList.add(2) 

arrayList.sort { $0 < $1 } 

print(arrayList.array) // [2, 5, 10, 12] 
+1

为什么你将T限制为Comparable,你不能仅仅因为它们不能排序而拒绝不可比较的元素编着'<' and'>'? 如果有任何问题,您可以添加一个扩展,该扩展仅适用于T可比的提供默认排序功能的扩展。 – overactor

+0

我知道我只是想简单回答这个问题,并避免* Binary Operator <不能应用于... *错误消息。 – vadian

+0

这将工作正常,没有限制,只要T是可比的。如果不是,你不应该期望能够用'<'比较它,你仍然可以通过其他方式进行比较。 – overactor