我要做的是为数组创建一个扩展,以检查所有元素是否都是唯一的。我的计划是创建一个Set并检查Set的计数到Array的计数。但是,我不确定如何将Set的类型绑定到与Array相同的Type。
extension Array {
func unique() -> Bool {
var set = Set<self>()
// Now add all the elements to the set
return set.count == self.count
}
}
答案 0 :(得分:3)
Array
类型定义为
public struct Array<Element>
所以Element
是通用占位符,您可以创建
与{/ p>具有相同元素类型的Set
let set = Set<Element>()
但您必须要求数组元素为Hashable
:
extension Array where Element : Hashable { ... }
(定义泛型类型的扩展方法的可能性 在Swift 2中添加了对类型占位符的限制。)
最后,使用set = Set(self)
自动推断设置类型:
extension Array where Element : Hashable {
func unique() -> Bool {
let set = Set(self)
return set.count == self.count
}
}