Swift(三)-集合类型

2017-01-12 10:02:11来源:作者:嘘_sheep人点击

第七城市

在上一节,讲了关于字符串和字符的一些基础知识,看起来有点枯燥,在后面几章节的学习中,看起来也比较枯燥,但是这些都是基础知识,对于有过编程基础的同学来说,当然过一遍已经足够了,对于没有编程经验的同学来说,还是需要看一看,了解一下。

在这一节中,我们将介绍关于集合的一些使用方法

集合的可变性

和OC中的NSArray不同,在Swift中还是通过变量和常量来控制集合的可变性,不仅是Array,Set和Dictionary也是一样,如果你希望集合的值不再被改变,那么就将他设置为常量,如果需要改变,当然就需要变量。

如果不需要改变,还是尽量设置成常量,好的编程习惯

数组(Arrays)

Swift是安全的语言,在Swift中使用集合类型,必须声明集合中的数据类型,和OC又不太一样,使用过Java或者其他的一些编译型语言的同学可能很容易理解,很多语言都有泛型这一说Array[T]

let string = [String]()// string数组 创建带有默认值的数组 let demo = Array(repeating: 1, count: 3)//这里创建出来的默认数组是[1,1,1] 数组相加

数组相加必须要两个数组的值的类型一直才能够进行加

let demo = Array(repeating: 1, count: 3)//[1,1,1]let demo1 = Array(repeating: 2, count: 5)//[2, 2, 2, 2, 2]let demo2 = demo + demo1//[1, 1, 1, 2, 2, 2, 2, 2]let demo2 = demo1 + demo//[2, 2, 2, 2, 2, 1, 1, 1]

看一下加的顺序不一样,出来的数组也不一样

字面量构造数组

就是用[]括起来就行

let array = [1,2,1,2] 访问和修改数组

首先数组有两个属性,用的比较多count / isEmpty

分别计算数组大小和是否为空

还有就是访问数组元素,可以直接使用下标法,这个我也不细讲很简单的

还有数组的插入和删除

insert(_:at:) / remove(at:)

这两个方法也很简单,我也不细讲了

数组的遍历

在OC中,我们就经常使用for-in来遍历数组,在这里也是一样的 语法稍微有点改变

let demo2 = [2, 2, 2, 2, 2, 1, 1, 1]for number in demo2 { print(number)}//一个一个打印出

如果想要打印出每个数组元素的索引

let demo2 = [2, 2, 2, 2, 2, 1, 1, 1]for (index,value) in demo2.enumerated() { print("index = /(index) value = /(value)")}/*index = 0 value = 2index = 1 value = 2index = 2 value = 2index = 3 value = 2index = 4 value = 2index = 5 value = 1index = 6 value = 1index = 7 value = 1*/ 集合(Sets)

集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。

使用集合的最主要原因就是这个不能有重复数据

集合的哈希值

一个类型为了要存储在集合中,这个类型必须要是可以哈希的。一个哈希值是Int型,相等的两个对象,哈希值必须相等 a==b 等价于 a.hashValue = b.hashValue

在swift中 String、Int 、Bool这些值都是可哈希的,如果我们在集合中要装我们自定义的一个类型,那么这个类型必须要符合 Swift 标准库中的Hashable协议,这个我们在讲到协议的时候会单独拎出来讲

集合类型语法

集合类型被写作 Set ,没错,也是泛型的

字面量创建集合 let demo: Set<String> = ["a","b"]

一个Set类型不能从数组字面量中被单独推断出来,因此Set类型必须显式声明,但是呢,我们可以这样来简化let demo: Set=[“a”,”b”],这样编译器就能够推断出是一个String类型的集合

访问和修改集合

集合也有count / isEmpty 两个属性,但是我们说过集合是没有顺序的,所以就没有下标这种概念了

调用remove(_:)删除元素

var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]if let removedGenre = favoriteGenres.remove("Rock") { print("/(removedGenre)? I'm over it.")} else { print("I never much cared for that.")}// 打印 "Rock? I'm over it. 遍历集合

for-in

for genre in favoriteGenres { print("/(genre)")}// Classical// Jazz// Hip hop

集合中有一个sorted()方法,可以再遍历的时候使用,将返回一个有序的结果,这个比较是操作符”<”来进行比较的

for genre in favoriteGenres.sorted() { print("(genre)")}// prints "Classical"// prints "Hip hop"// prints "Jazz 集合的操作

上面的图显示了集合中的几个方法的含义,这个我就不细讲,看图就能够明白

字典 字典的字面量声明 let demo = ["key1":"value1","key2":"value2"] 访问字典

访问和修改字典都可以通过key操作来完成,这个我也不细讲了

demo["key1"] = "new value"//这样字典中的value1就变成了new value

作为另一种下标方法,字典的updateValue(_:forKey:)方法可以设置或者更新特定键对应的值。就像上面所示的下标示例,updateValue(_:forKey:)方法在这个键不存在对应值的时候会设置新值或者在存在时更新已存在的值。和上面的下标方法不同的,updateValue(_:forKey:)这个方法返回更新值之前的原值。这样使得我们可以检查更新是否成功。

if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") { print("The old value for DUB was (oldValue).")}// 输出 "The old value for DUB was Dublin. 字典的遍历

for-in

for (airportCode, airportName) in airports { print("(airportCode): (airportName)")}//对所有遍历for airportCode in airports.keys { print("Airport code: (airportCode)")}//对key遍历// Airport code: YYZ// Airport code: LHRfor airportName in airports.values { print("Airport name: (airportName)")}//对value遍历// Airport name: Toronto Pearson// Airport name: London Heathrow

集合完结。。。。

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台