当前位置 : 主页 > 手机开发 > 其它 >

泛型 – 对泛型扩展的快速类型约束

来源:互联网 收集:自由互联 发布时间:2021-06-11
经过一些压力后,我创建了以下通用函数: func removeDupesT : Hashable (inout inputCollection : [T] ) - [T] { var hashMap = [T : Bool]() var output = 0 for thing in inputCollection { if !hashMap[thing] { hashMap[thing] = true
经过一些压力后,我创建了以下通用函数:

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”]

现在我想在Array上添加“removeDupes”作为扩展方法,我正在用语法进行挣扎,因为我必须将它限制为Hashable项的数组.

我希望我可以这样声明:

extension Array {
  func removeDupes< T : Hashable> () -> [T] {
    return removeDupes(&self)
  }
}

但我得到错误:

数组不能转换为’@lvalue inout $T5′

我怀疑答案是“你这个白痴,做这个……”还是“你做不到”

它会是哪个?

网友评论