程式=資料結構+算法
資料結構:
數組(array),棧(stack),隊列(queue),連結清單(linked list),樹(tree),圖(graph),堆(heap)和哈希表(hash)
不同的結構對應于不同的算法,有的考慮節省空間,有的考慮速度,提高運作速度往往是以犧牲空間為代價,與之相反。
1、數組集合
數組是一串有序相同類型的元素構成的集合,數組更關心是否有序,而對于重複則不關心;
(1)數組聲明與初始化
數組聲明:var studentlist1:array<string>
var studentlist2:[string]
初始化:var studentlist1:array<string> =["張三",“李四”]
var studentlist2:[string] = [ "張三",“李四”]
let studentlist3:[string] = ["張三","李四"]
var studentlist4:[string] = [string]()
nsarray: 類,引用類型
array:結構體,值類型
(2)數組的修改
可變數組中的元素進行追加,删除,插入和替換等修改操作;
1、追加元素可以使用append方法或者+操作符;
2、插入元素可以使用insert方法實作;
3、删除元素可以使用removeatindex方法實作;
4、替換元素可以直接指派;
var studentlist1:[string] = ["張三","李四"]
println(studentlist1)
studentlist1.append("王五")
studentlist1 +=["趙六","王八"]
studentlist1.insert("張飛",atindext:studentlist.count)
let removestudent = studentlist.removeatindex(0)
(3)數組周遊
可以使用for in循環周遊數組
for (index,value) in enumarate(studentlist){
println("item\(index+1)\(vaule)")
}
2、字典集合
字典表示一種非常複雜,允許按照某個鍵來通路元素,字典是由2部分集合構成的,一個是鍵(key)的集合,一個是值(value)的集合,鍵集合不能有重複的,值集合可以有重複的。
(1)字典聲明與初始化
聲明:
var studentdicationary:dictionary<int,string>
var studentdicationary:[int:string]
初始化:
var studentdicationary:dictionary<int,string> = [102:"張三",103:“李四”]
var studentdictionary = [102:"張三",103:"李四"]
let studentdictionary = [102:"張三",103:"李四"]
ar studentdictionary = dictionary<int,string>()調用構造方法
(2)字典的修改
可變字典中的元素進行追加,删除和替換等操作
1、追加元素
如果給不存在的鍵指派,結果是在字典中追加一個新的鍵值對
2、删除元素可以使用字典的removeatindex方法實作,
2種方法:
一種是通過給鍵值指派nil;
另一種是通過字典的removevalueforkey(key)方法删除,方法的傳回值就是要删除的值
3、替換元素
兩種方法:
一種是直接給存在的鍵指派,
另一種是通過updatevalue(forkey:)方法替換,方法的傳回值就是要替換的值
studentlist.updatevalue("李四",forkey:102)
(3)字典的周遊
字典的周遊也是字典的重要操作,周遊值的集合,也可以周遊鍵的集合,也可以同時周遊,通過for in循環周遊
獲得所有鍵集合:keys屬性
獲得所有值jiehe:values屬性
var studentlist = [102:"張三",103:"李四"]
for studentid in studentlist.keys{}
for studentname in studentlist.values{}
for (studentid,studentname) in studentlist{}
3、集合的複制
集合在指派或參數傳遞過程中會發生複制,swift中的值類型和引用類型,值類型會發生複制,而引用類型不會發生。
(1)字典複制
在為字典指派或參數傳遞的時候,字典總是發生複制行為,但是它的鍵和值是否發生複制要看資料的類型,
(2)數組複制
數組與字典複制類似,在為數組指派或者參數傳遞的時候,數組總會發生複制