字典(dictionary)全跨、數(shù)組(array)缝左、集合(set)區(qū)別:
字典特性:元素不重復(fù)、存儲無序浓若、元素類型可不同渺杉。
數(shù)組特性:元素可重復(fù)、存儲有序挪钓、元素類型均相同是越。
集合特性:元素不重復(fù)、存儲無序碌上、元素類型均相同倚评。
Set 類型語法前瞻
1.類型:
Set,其中Element為集合存入元素的類型,例如Int馏予、String等天梧,注意集合是沒有簡寫方式。
2.創(chuàng)建方式:
var letters = Set()初始化一個空集合霞丧。由于字母表中字母均不重復(fù)呢岗,類型均為Character,沒有特別強(qiáng)調(diào)有序還是無序蛹尝,因此使用集合非常合適后豫。
3.插入元素:
letters.insert("a"),往集合中插入"a"字母突那,再次調(diào)用想要插入第二個字母“a”無用挫酿,原因在于集合內(nèi)元素不可重復(fù)特性。
4.清空集合:
和數(shù)組一樣愕难,使用letters = []方式即可清空集合內(nèi)所有元素早龟。
5.使用字面量數(shù)組創(chuàng)建集合:
如果每一次都循規(guī)蹈矩使用Set()創(chuàng)建一個空數(shù)組惫霸,然后逐個插入元素就顯得繁瑣了。Swift自然也考慮到了拄衰,提供了如下捷徑:
//1varfavoriteGenres:Set = ["Rock","Classical","Hip hop"]//2varfavoriteGenres2:Set = ["Rock","Classical","Hip hop","Hip hop"]
注意初始方法和數(shù)組很相像它褪,1和2的區(qū)別還在于2中“Hip hop”重復(fù)了2次,秉著集合元素不可重復(fù)特性翘悉,因此1茫打、2兩個集合最后初始化的結(jié)果是一樣,均為{"Rock", "Classical", "Hip hop"}妖混。
對了Swift是動態(tài)語言老赤,因此即使你未指明集合元素的類型,它也能幫你推斷出來制市,例如這么寫var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]抬旺。
Set 操作
假設(shè)集合名字默認(rèn)為setName。
獲取集合內(nèi)元素個數(shù)祥楣。調(diào)用setName.count开财,其中count為只讀變量。
檢查集合是否為空误褪。調(diào)用setName.isEmpty责鳍,返回true 或 false。
向集合中插入一個元素兽间。調(diào)用setName.insert(element),其中element假定為一個符合集合的元素历葛。
從集合中刪除一個元素。調(diào)用setName.remove(element),如何要刪除的元素存在嘀略,則從集合中刪除該元素恤溶,且返回刪除的元素(自身);倘若元素不存在帜羊,則返回nil咒程。
刪除集合內(nèi)所有元素。調(diào)用setName.removeAll()或者setName = []均可讼育。
檢查集合是否包含某個元素孵坚。調(diào)用setName.contains(Element),返回true 或 false。
遍歷整個集合窥淆。前文說到集合是無序的,因此在遍歷的時候輸出元素順序不定巍杈,例如["Rock", "Classical", "Hip hop"]集合可能輸出順序是這樣的:Classical -> Rock -> Hip hop,也有可能是Hip hop -> Classical -> Rock,所以別指望它循規(guī)蹈矩忧饭。
forelementinsetName{//因為Set也是一個CollectionType 所以對數(shù)組的操作 它都適用}
倘若想要有序遍歷,請使用for element in setName.sort(){}筷畦,先進(jìn)行sort整理词裤,后遍歷的方式刺洒。
補(bǔ)集、交集吼砂、并集
數(shù)學(xué)中我們曾學(xué)習(xí)過對集合的操作逆航,包括求兩個集合的補(bǔ)集、交集渔肩、并集因俐。如下圖
無須自己實現(xiàn),Swift已經(jīng)提供了相關(guān)API周偎,我們所以要做的是學(xué)習(xí)如何操作這些API即可抹剩,當(dāng)然你有興趣可以深挖下。
先簡單介紹下上圖中的四個集合操作:
intersect(_:)方法蓉坎。求集合a和b的交集澳眷。
exclusiveOr(_:)方法。求一個集合蛉艾,其內(nèi)元素為a或b集合中元素钳踊,但不能同屬a和b。
union(_:)方法勿侯。求集合a和b的并集拓瞪。
subtract(_:)方法。求集合a-b的差集罐监,即新集合元素只包含a中元素吴藻,不包含b中元素。
官方文檔提供了一個例子弓柱,奇數(shù)集合oddDigits沟堡、偶數(shù)集合evenDigits和素數(shù)集合singleDigitPrimeNumbers,注意集合內(nèi)元素均是獨(dú)一無二的矢空。
let oddDigits:Set= [1,3,5,7,9]
let evenDigits:Set= [0,2,4,6,8]
let singleDigitPrimeNumbers:Set= [2,3,5,7]
oddDigits.union(evenDigits).sort()// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]?
oddDigits.intersect(evenDigits).sort()// [ ]
oddDigits.subtract(singleDigitPrimeNumbers).sort()// [1, 9]
oddDigits.exclusiveOr(singleDigitPrimeNumbers).sort()// [1, 2, 9]