Swift4学习笔记4——集合类型
来源:互联网 发布:php判断变量是否为空 编辑:程序博客网 时间:2024/06/06 03:59
集合类分为array、dictionary、set。每个集合都有一个isEmpty属性来判断这个集合是否为空
Array
创建array的四种方法
var array1 = ["a","b","c"] //包含 a b c 三个字符串var array2 = Array<Int>() //空array,这里一定要指明元素类型var array3 = [String]() //空arrayvar array4 = Array(repeating:2.4, count:3) //包含3个double变量,值都为1.3var array5 = [Double](repeating:2.4, count:3) //包含3个double变量,值都为1.3
获取array的某个元素,直接用下标就行
var value = array1[2]
清空数组
//将array1变为空,下面两个方法是等价的array1.removeAll()array1 = [];
想要清空某个元素,用remove(at:) 方法
如果想要清空某个范围的元素,API提供了
array1.removeSubrange(1..<arr.endIndex)// 这里会移除从1开始,但是不包括end的元素,但是endIndex是指向最后一个元素的后一个元素的,所以会从index为1的元素开始,删除后面全部。array4[1...2] = [] //这里将范围1-2的元素都清空了,注意一点,如果数组越界的话,会产生运行时错误
向array添加元素
//使用append()方法array1.append("A") //向array1的末尾添加一个 A,现在只有一个 A 元素//使用运算符号array3 += ["d","e"] //array3从空数组变为包含 d e 两个字符串var array5 = array1 + array3 + ["last"] //array5包含 A d e last, 4个元素//使用insert方法array5.insert("first", at: 0) //array5包含 first A d e last, 5个元素
改变array元素
array5[0] = "newBe"array5[1...3] = ["1","2","3"]
遍历数组
for item in array5 { print(item)}for (index,item) in array5.enumerated() { print(index,item)}
Set
set里面的元素都必须实现hashable。因为区分set里面的元素的根本就是判断两个元素的hash值是否相等。swift基本类型都实现了hashable
var emptySet = Set<Character>() //建立一个空set,必须指明内容的类型var nameSet : Set<String> = ["Tom","Lucy","Aaron"] //使用初始数据建立set
Set的添加只有刚刚上面那个 insert 方法,就不介绍了。
移除Set
removeAll(),这个方法还可以传一个boolean参数,表示是否保持空间,传ture的话表示保持。
移除一个元素有两种办法
var index = nameSet.index(of:"Tom")nameSet.remove(at:index!) //因为indexOf返回的是可选类型,所以这里要解包nameSet.remove("Tom") //这种和上面的是等价的。
遍历Set
for name in nameSet.sorted() { //这里的sorted()可以不用,这里用来排序 print(name)}
Set和Array都有一个contains方法来判断是否包含某个元素。
Set操作
包括了求交集,并集,“减集”,“异或集”,直接上官方代码
let oddDigits: Set = [1, 3, 5, 7, 9]let evenDigits: Set = [0, 2, 4, 6, 8]let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]oddDigits.union(evenDigits).sort()// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]oddDigits.intersection(evenDigits).sort()// []oddDigits.subtracting(singleDigitPrimeNumbers).sort()// [1, 9]oddDigits.symmetricDifference(singleDigitPrimeNumbers).sort()// [1, 2, 9]
Set关系
isSubset(of:) 判断一个set是否为另外一个set的子set
isSuperset(of:) 判断一个set是否为另外一个set的父set
isStrictSubset(of:) 和 isStrictSuperset(of:) 意思和上面的一样,只是这两个方法不能存在相等的情况。
isDisjoint(with:) 判断两个set是否没有共同元素,没有的话返回true
Dictionary
创建Dictionary的三种方法
var dict1 : [String:Int] = ["a":1,"b":2,"c":3]var dict = ["a":1,"b":2,"c":3, 3:"d"] as [AnyHashable : Any] //注意这个没声明类型的,因为key和value里面都有不同的类型,所以需要将二者都强转为AnyHashable,但是如果key(value)类型只有一种的话,那么就会转为那种类型。var dict2 = [Int:String]()var dict3 = Dictionary<String,Int>()
添加/修改/删除dictionary
dictionary也提供了removeAll,removeAtIndex之类的方法。使用和Set是一样的,就不写了。下面是dictionary特有的
dict[5] = "f" //添加一个键值对 5: "f"dict[5] = 5 //修改key为5的值为5dict[5] = nil //删除key为5的键值对dict[6] = nil //对不存在的键值对赋nil不会报错dict2 = [:] //清空所有
现在新增了一个更改和删除的方法,可以获得更新和删除前的旧值(可选类型)。如果这个值以前不存在,那么返回nil
let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") let removedValue = airports.removeValue(forKey: "DUB")
遍历dictionary
同样可以对key和value进行遍历,只需把in 后面改为 dict.keys 或 dict.values 就行了。
for (key,name) in dict { print(key,name,separator:":")}var keys = dict1.keys.sort();for key in keys { print(key,dict[key]!)}
- Swift4学习笔记4——集合类型
- Swift4 学习笔记——基础篇
- Swift4 学习笔记——高级篇
- 【Swift4.0】集合类型-Array
- 【Swift4.0】集合类型-Set
- 【Swift4.0】集合类型-Dictionary
- Swift4学习笔记3——String和Character
- Swift4学习笔记5——流程控制语句
- Swift4学习笔记6——函数(Function)
- Swift学习笔记4——集合类型
- Swift4.0 — 属性
- python 学习笔记——set() class 集合类型
- Swift学习笔记系列——(3)集合类型
- swift学习笔记(4)-集合类型
- Swift4学习笔记-0 写在开始之前
- Swift4学习笔记-1.1 关于Swift
- Swift4学习笔记-1.2 版本兼容性
- Swift4学习笔记-1.3 Swift之旅
- TensorFlow----最近算法nearest_neighbor
- Android studio 更换SVN地址
- 基础Java知识汇集
- Android ReplacementSpan 文字对齐问题
- Linux内核内存管理之BUDDY页面管理(二)
- Swift4学习笔记4——集合类型
- mfc图片管理器(缩小,旋转)
- Graphics.DrawString 方法
- MySQL计数器表
- Redis几种数据结构的应用场景
- forward redirect
- 十进制转十六进制
- [BZOJ 2656][Zjoi2012]数列(sequence):高精度+递推
- Oracle 11g保证存储过程同时只能被一个线程执行