相關文章?
[Swift快速入門(一)第一個Swift程序](http://blog.csdn.net/itachi85/article/details/50531727)?
[Swift快速入門(二)基本數據類型](http://blog.csdn.net/itachi85/article/details/50596987)?
[Swift快速入門(三)運算符](http://blog.csdn.net/itachi85/article/details/50638125)?
[Swift快速入門(四)流程控制](http://blog.csdn.net/itachi85/article/details/50658955)
### 前言
Swift提供了數組和字典兩種集合類型來存儲數據,Swift的數組用來存儲順序相同類型相同的類型,字典則采用kay-value的形式存儲數據。
**1.數組**
數組用來存儲同一個數據類型的多個數據,通常可通過數組元素的索引來訪問數組元素。
####聲明數組
聲明數組有兩種語法:
1. 使用泛型語法。格式為:Array
2. 使用簡化語法。格式為:[類型]
~~~
// 使用泛型語法聲明數組
var arr : Array<String>
// 使用簡化語法聲明數組
var names : [String]
~~~
####創建數組
創建數組也有兩種方式:?
1\. 使用Array的構造器創建數組?
2\. 使用簡化語法創建數組
~~~
// 創建一個空數組,并將該空數組賦值給myArr變量
arr= Array<String>()
// 創建一個包含10個"moon"元素的數組,并將該數組賦值給names變量
names = Array<String>(count: 10, repeatedValue: "moon")
// 使用簡化語法創建數組,并將數組賦值給values變量
var values = ["2" , "3" , "3" , "4" , "5" , "6"]
~~~
####遍歷數組
普通的循環遍歷數組:
~~~
for var i = 0; i < values .count ; i++
{
print(values[i])
}
~~~
for-in循環遍歷數組:
~~~
for value in values{
//會報錯"canot assign to value:'value' is a 'let'...
//value="5"
print(value)
}
~~~
需要注意的是,在使用for-in循環遍歷是,不允許對循環常量進行賦值,因為for-in循環隱式的用let來聲明了該常量。
####修改數組
Array提供了append()方法來添加元素:
~~~
// 使用var定義一個可變數組
var languages = ["Swift"]
// 添加元素,輸出為["Swift","Java"]
languages.append("Java")
~~~
還可以用”+“來進行數組的的加法運算:
~~~
//輸出為["Swift","Java","Ruby"]
languages=languages+["Ruby"]
~~~
Array提供了insert()方法來添加元素:
~~~
// 插入元素,這時數組第一個元素為"Go"
languages.insert("Go" , atIndex:0)
~~~
Array支持在”[]”中使用Range,這樣可以一次性獲取和賦值多個數組元素:
~~~
var languages = ["Swift", "OC", "PHP", "Perl" , "Ruby" , "Go"]
// 獲取languages中數組中索引為1~4的元素
let subRange = languages[1..<4]
print(subRange) // 輸出[OC, PHP, Perl]
// 將languages中數組中索引為2~4的元素替換成"C/C++" , "Python"
languages[2...4] = ["C/C++" , "Python"]
print(languages) // 輸出[Swift, OC, C/C++, Python, Go]
// 清空數組
languages[0..<languages.count] = []
print(languages) // 輸出[]
~~~
Array提供了removeAtIndex()、removeLast()和removeAll()方法來進行刪除:
~~~
var languages = ["Swift", "OC", "PHP", "Perl" , "Ruby" , "Go"]
// 刪除索引為2的元素,刪除"PHP"
languages.removeAtIndex(2)
print(languages) // 輸出[Swift,Perl,OC, Ruby, Go]
// 刪除最后一個元素,刪除"Go"
languages.removeLast()
print(languages) // 輸出[Swift, Perl,OC, Ruby]
// 刪除所有元素
languages.removeAll()
print(languages) // 輸出[]
print(languages.count) // 輸出0
~~~
**2.字典**
字典用于保存具有映射關系的數據,key和value都可以是任何數據類型的的數據,其中字典的key不允許重復。
####聲明字典
聲明字典有兩種語法:?
1\. 使用泛型語法,格式為:Dictionary
~~~
// 使用泛型語法聲明字典
var dict : Dictionary<String, String>
// 使用簡化語法聲明字典
var scores : [String:Int]
~~~
####創建字典
同樣的創建字典也有兩種方式:
1. 使用Dictionary的構造器
2. 使用簡化語法
~~~
// 創建一個Dictionary結構體,使用默認的參數
dict = Dictionary<String, String>()
// minimumCapacity至少包含鍵值對的個數,默認值為2
scores = Dictionary<String, Int>(minimumCapacity:5)
// 使用簡化語法創建字典
var health = ["身高":"178" , "體重":"75"]
~~~
####使用字典
訪問字典的value需要在字典變量后緊跟一個方括號”[]”就可以了,方括號里是字典value對應的key值。
~~~
//將key值賦值給height
var height = health["身高"]
print(height) // 輸出Optional("178")
// 訪問并不存在的key對應的value時,將會返回nil
var energy = health["能量"]
print(energy) // 輸出nil
~~~
從上面的代碼可以看出,根據key值訪問字典對應的value時,返回的是包含value值的可選類型,因為字典不確定是否這個鍵值對存在,當鍵值對存在時則返回key對應的value,否則就返回nil。這時我們可以通過強制解析來解決這個問題:
~~~
//height的類型是String?,而不是String
var height : String? = health["身高"]
if height != nil
{
// 使用!執行強制解析,輸出為178
print(height!)
}
~~~
for-in循環同樣可以用來遍歷字典:
~~~
for heal in health
{
print(heal) //輸出 ("身高",178) ("體重",75)
}
~~~
####字典的key集和value集
如果程序只需要訪問字典的key集和value集,只需要訪問字典的keys屬性或者values屬性。
~~~
var healths = ["身高":"178" , "體重":"75"]
var keys=Array(healths.keys)
var values=Array(healths.values)
print(keys) //輸出["身高","體重"]
print(values)//輸出["178","75"]
~~~
####修改字典
字典提供了updataValue()方法來修改字典的value值,該方法會返回一個Sting?類型的值,如果key值存在則修改成功,如果key值不存在則返回nil,但會新增一個key-value值
~~~
var healths = ["身高":"178" , "體重":"75"]
var result=healths.updateValue("68",forKey:"體重")
print(result) // 輸出Optional("75")
print(health) // 輸出["身高":"178" , "體重":"68"]
var result=healths.updateValue("A",forKey:"血型")
print(health) // 輸出["血型":"A","身高":"178" , "體重":"68"]
~~~
字典還提供了如下的方法來刪除元素:
1. removeValueForKey:刪除指定key對應的value
2. removeAll:清空字典
~~~
var languages = ["Swift":9000, "OC":8600, "PHP":3400,
"Perl":4300 , "Ruby":5600 , "Go": 5600]
// 刪除key為"PHP"的key-value對
languages.removeValueForKey("PHP")
// 刪除key為"Perl"的key-value對
languages.removeValueForKey("Perl")
// 下面輸出:[Go: 5600, OC: 8600, Ruby: 5600, Swift: 9000]
print(languages)
print(languages.count) // 輸出4
~~~
還可以將Key對應的Value值賦值為nil來刪除該key-value對:
~~~
// 刪除key為"Go"的key-value對
languages["Go"] = nil
print(languages) // 輸出[OC: 8600, Ruby: 5600, Swift: 9000]
// 刪除所有元素
languages.removeAll()
print(languages) // 輸出[:]
print(languages.count) // 輸出0
~~~