Swift快速入门(五)集合

最后更新于:2022-04-01 09:51:02

相关文章  [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 ~~~
';