Swift快速入門(五)集合


相關文章
Swift快速入門(一)第一個Swift程序
Swift快速入門(二)基本數據類型
Swift快速入門(三)運算符
Swift快速入門(四)流程控制

前言

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

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com