集合的操作
这节,我们主要介绍如何操作这些数据组合。
操作任何数据,可以简单提炼为 增,删,改,查
四个字。
关于查
,就是访问,上节我们已经说过了,本节主要讨论增,删,改
。
但是,具体到不同的类型,未必就分的很清楚,我们针对不同的组合类型分别讨论。
数组的操作
- 组合
两个数组可以直接拼接,这个操作有点像String。
var someNumbers = [1,2,3]
var moreNumbers = [2,3,4]
someNumbers + moreNumbers // [1, 2, 3, 2, 3, 4]
因为数组可以重复,因此,两组数据合并了,且保留了重复的值和顺序。
我们还可以使用 +=
,也能组合数据,效果相同,但是意义不同。
+
是组合出一个新的数据,someNumbers
本身并没有改变。而+=
则是改变了someNumbers
。
- 追加
我们可以在一个数组的后面追加数据,使用.append
(),将单个数据加在数组的最后。
var someNumbers = [1,2,3]
someNumbers.append(4) // [1, 2, 3, 4]
- 指定位置插值
我们可以利用数组的下标,insert(_:at:)
,在指定某个索引位置之前插入数据。
var someNumbers = [1,2,3]
someNumbers.insert(5, at: 0) // [5, 1, 2, 3] 在第一个位置,插入了5
- 删除
与.append
对应,我们使用.removeLast()
,可以删除最后一项值。
var someNumbers = [1,2,3]
someNumbers.removeLast()
someNumbers // [1,2]
还可以删除指定位置的值,使用remove(at:)
var someNumbers = [1,2,3]
someNumbers.remove(at: 1)
someNumbers // [1, 3] 删除了数组中的第二个值
- 修改
利用下标,指定某个位置或某段位置,赋值后,就覆盖了原数据,实现了修改
var someNumbers = [1,2,3]
someNumbers[0] = 5
someNumbers // [5, 2, 3]
字典的操作
字典带有key,因此,可以通过指定key,实现插入数据,覆盖修改,删除等操作。
var stringDict = ["A":"sky","B":"river","C":"mountain"]
// 指定一个不存在的key,可以插入新的数据
stringDict["D"] = "road"
stringDict // ["A": "sky", "B": "river", "D": "road", "C": "mountain"]
// 指定一个已经存在的key,可以修改value
stringDict["A"] = "house"
stringDict // ["A": "house", "B": "river", "D": "road", "C": "mountain"]
// 将已经存在的key的value指定为nil,可以删除一条数据
stringDict["A"] = nil
stringDict // ["B": "river", "D": "road", "C": "mountain"]
此外,字典也带有方法可以跟新和删除数据。updateValue(_:forKey:)
,removeValue(forKey:)
。
var stringDict = ["A":"sky","B":"river","C":"mountain"]
// 修改值
stringDict.updateValue("road", forKey: "C")
stringDict // ["A": "sky", "B": "river", "C": "road"]
// 删除值
stringDict.removeValue(forKey: "A")
stringDict // ["C": "road", "B": "river"]
集合的操作
因为集合是无序的,没有下标,因此insert插入一个值,是不用也无法指定位置的。
var setIntValues: Set = [1,2,3]
// 插入值
setIntValues.insert(4)
setIntValues // {3, 4, 1, 2}
因为集合的无序性,我们可以指定要删除的值。
var setIntValues: Set = [1,2,3]
setIntValues.remove(1)
setIntValues
在集合中,还可以removeFirst()
,removeAll()
,但是要注意,First的值因为无序性,是会随机变化的。
最后,Set还有一个重要的概念
我们可以对不同的集合进行交集,并集,差集,对称差集等操作
// 定义一个新的集合
var newSet: Set = [2,3,4,5]
// intersection,交集,相交的部分
newSet.intersection(setIntValues) // 2,3
// union 并集,合并
newSet.union(setValues) // 5, 2, 4, 3, 1
// subtracting 差集,与原集不同的部分
newSet.subtracting(setValues) //5, 4
// symmetricDifference,对称差集,与两个集不相交的部分
newSet.symmetricDifference(setValues) // 5, 1, 4
如果还是不理解的话,官方教程给我们提供了这样一张图:
setVennDiagram_2x.png
小结与预告
好了,讲到这里,我们其实都是在讨论静态的数据。可能你会感到有些无聊,但这些基础概念确实很重要,如果没有吃透,总有一天你会再回来的。
我们再来回顾下都学了什么。
首先,是基本数据类型,有无,数字,文字,判断值;然后,这些数据也可以组合的形式出现;最后,是对这些数据进行增删改查的操作。没错,你就学到了这么多。现在,把这三步放在你的脑海中回忆一下,再把细节放回去,是不是能扩充一下?
能不能在Playground中,按这三步的顺序,将主要的知识点体现在代码中?
从下节开始,我们开始学点更有意思的东西:流程控制。
网友评论