经过一些压力后,我创建了以下通用函数:
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′
我怀疑答案是“你这个白痴,做这个……”还是“你做不到”
它会是哪个?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。