2015-10-16 59 views
2

我想要做的是創建一個數組的擴展來檢查是否所有的元素都是唯一的。我的計劃是創建一個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 
    } 
} 

回答

3

Array類型被定義爲

public struct Array<Element> 

所以Element是通用佔位符,你可以用相同的元素類型創建 一個Set作爲

let set = Set<Element>() 

但你必須要求陣列元素是Hashable

extension Array where Element : Hashable { ... } 

最後(定義爲通用類型 與類型佔位符限制在夫特2.加入擴展方法的可能性),與set = Set(self)集合的類型自動推斷出:

extension Array where Element : Hashable { 
    func unique() -> Bool { 
     let set = Set(self) 
     return set.count == self.count 
    } 
} 
+0

完全正確。我輸了比賽... :))))) – matt

+0

whats'hashable'是什麼意思? – Dustin

+0

@Dustin:'Hashable'是*協議*,請參閱https://developer.apple.com/library/ios/documentation/Swift/Reference/Swift_Hashable_Protocol/index.html。 –