经过一些压力后,我创建了以下通用函数:
- func removeDupes<T : Hashable > (inout inputCollection : [T] ) -> [T] {
- var hashMap = [T : Bool]()
- var output = 0
- for thing in inputCollection {
- if !hashMap[thing] {
- hashMap[thing] = true
- inputCollection[output++] = thing
- }
- }
- while (inputCollection.count > output) {
- inputCollection.removeLast()
- }
- return inputCollection
- }
所以当你这样做时:
- var names = ["Bob","Carol","Bob","Ted","Alice","Alice"]
- removeDupes(&names)
名称将包含:[“Bob”,“Carol”,“Ted”,“Alice”]
现在我想在Array上添加“removeDupes”作为扩展方法,我正在用语法进行挣扎,因为我必须将它限制为Hashable项的数组.
我希望我可以这样声明:
- extension Array {
- func removeDupes< T : Hashable> () -> [T] {
- return removeDupes(&self)
- }
- }
但我得到错误:
数组不能转换为’@lvalue inout $T5′
我怀疑答案是“你这个白痴,做这个……”还是“你做不到”
它会是哪个?