经过一定的压力,我创建了以下通用函数:
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", "Bob", "Carol", "Ted", "Ted", "Alice", "Ted", "Alice"]
removeDupes(&names)
名称将包含:[“Bob”、“Carol”、“Ted”、“Alice”]
现在我想将“removeDupes”作为扩展方法添加到 Array 上,并且我在语法上苦苦挣扎,因为我必须将它限制为 Hashable 项的数组。
我希望我可以这样声明:
extension Array {
func removeDupes< T : Hashable> () -> [T] {
return removeDupes(&self)
}
}
但我得到了错误:
数组不可转换为 '@lvalue inout $T5'
我怀疑答案是“你这个白痴,做这个……”或者“你做不到”
会是哪个?:-D