Mutability of Collections
這取決於是var還是let,var可變,let不可變
Array
數組裏存放相同類型的對象,swift的Array 橋接於 OC裏的NSArray
如何規定數組類型
有兩種方式來確定規定數組裏所放數據的類型。第一是 Array<Element>,第二是[Element].
創造一個空的數組
var someInts = [Int](),如果更具已有的內容推斷出someInts爲int數組,我們還可以直接用 someInts = []來設置空數組
創造帶初始值的數組
varthreeDoubles =Array(repeating:0.0,count:3)repeating這個參數爲初始值,數組更具這個值來推斷類型,count爲初始值重複的次數。
創造一個數組通過合併兩個數組
var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
創造一個數組的簡易語法
[value 1,value 2, value 3]
var shoppingList = ["Eggs","Milk"]
訪問和修改數組
count屬性:返回數組裏的元素數量
isEmpty屬性
append方法:添加元素
+=操作符:合併其他數組
[index]:訪問數組元素,[index1...index2]語法可以替換一定範圍內的值,
如:shoppingList[4...6] = ["Bananas","Apples"]要注意的是選中範圍內的被替換元素數量不一定
等於替換的。
insert(_:at:)方法:如:shoppingList.insert("Maple Syrup", at:0)
remove(at:)方法:這個方法有返回值,返回值爲移出的元素。
removeLast()方法:
遍歷一個數組
方法一:
for item in shoppingList {
print(item)
}
方法二:
如果你想要在得到值的同時,獲取到該元素的下標,你應該用數組的enumerated()方法,該方法返回值與下標組成的元組。
for (index, value) in shoppingList.enumerated() {
print("Item \(index + 1): \(value)")
}
Sets(注意Sets裏的元素必須是可Hash的)
設置集合類型:
Set<Element>
Sets元素的Hash值
放在Sets裏的類型,必須是可Hash的,一個Hash值是一個int類型,String
,
Int
, Double
, and
Bool都是
可
Hash的
創造和初始化一個空的Set
varletters
= Set<Character>()
如果一個var類型的 Set已經確定了所存儲的類型,可以通過 letters = []設置一個空的 Set。
用數組初始化一個 Set
varfavoriteGenres:Set<String> = ["Rock","Classical","Hip hop"]或者
-
varfavoriteGenres= ["Rock","Classical","Hip hop"]
-
-
訪問和修改一個 Set
-
count 屬性:
-
isEmpty 屬性:
-
insert()方法:
favoriteGenres.insert("Jazz") - remove(_:)方法:注意 remove()方法有返回值,如果移除的元素不存在,則返回 nil;
-
ifletremovedGenre = favoriteGenres.remove("Rock") {
-
print("\(removedGenre)? I'm over it.")
-
}else {
-
print("I never much cared for that.")
-
}
-
// Prints "Rock? I'm over it."
contains(_:)
方法:檢驗
Set 是否包含某元素
遍歷 Set 方法:
1)
-
forgenrein favoriteGenres {
-
print("\(genre)")
-
}
-
// Jazz
-
// Hip hop
-
// Classical
- 2)
-
forgenrein favoriteGenres.sorted() {
-
print("\(genre)")
-
}
-
// Classical
-
// Hip hop
-
// Jazz
Set的sorted()方法,返回一個安 set 中元素從小到大排列的數組。
集合操作
intersection(_:)
:返回一個新集合,這個新集合是兩個集合的交集
symmetricDifference(_:)
:返回兩個集合交集的補集
union(_:):返回兩個集合的並集。
subtracting(_:):返回一個集合減去兩個集合的並集。
==:判斷兩個集合的內容是否完全相同
isSubset(of:):判斷某個集合是否爲另一個集合的子集。
isSuperset(of:):判斷某個集合是否爲另一個集合的父集
isStrictSubset(of:)
or isStrictSuperset(of:)
:判斷是否包含但不相同。
isDisjoint(with:):判斷兩個集合是否有相同值
Dictionaries
Dictionary<Key, Value>
或者
[key:value]其中key 必須是可hash的
創造一個空字典
varnamesOfIntegers
= [Int:String]()-
varairports: [String:String] = ["YYZ":"Toronto Pearson", "DUB": "Dublin"]或者
-
-
varairports = ["YYZ":"Toronto Pearson", "DUB": "Dublin"]
訪問和修改字典:
count 屬性:
isEmpty 屬性:
增加和修改: dictionary[key] = value 如果字典裏沒有這個 key 會自動添加,有的話爲修改key 下的 值.或者用 updateValue(_:forkey:)方法,和上面唯一的區別是這個方法返回一個可選值, 如果 key存在,返回更改前的值,如果 key 不存在返回 nil。
移除:
dictionary[key] = nil 或者 removeValue(forKey:)這個方法同 updateValue()一樣都有返回值。
遍歷一個字典:
-
for (airportCode,airportName)in airports {
-
print("\(airportCode):\(airportName)")
-
-
}
- forairportCodeinairports.keys {
-
print("Airport code: \(airportCode)")
-
}
-
// Airport code: YYZ
-
// Airport code: LHR
-
-
forairportNamein airports.values {
-
print("Airport name: \(airportName)")
-
}
-
// Airport name: Toronto Pearson
-
// Airport name: London Heathrow
-
- letairportCodes = [String](airports.keys)
- // airportCodes is ["YYZ", "LHR"]
- letairportNames = [String](airports.values)
- // airportNames is ["Toronto Pearson", "London Heathrow"]