持续创作,加快成长!这是我参加「日新方案 6 月更文挑战」的第4天,点击检查活动详情

在本章中,你将学会数组、调集和字典三种调集类型的常见运用办法。

前言

Apple官网或者网上共享的教程类文章不同,我将以实践开发视点叙述Swift言语的一些概念和用法,方便大家更好地学习和把握Swift言语。

这同时也是对自己学习Swift言语进程的知识收拾。

如有过错,以你为准。

咱们新建一个PlayGround文件,命名为SwiftTypeSet

Swift实用小册04:数组、集合和字典的使用

数组的创立

数组,是一堆数据有序摆放的调集。

和字符串运用的办法类型,咱们能够用数据的字面量来构建数组,咱们常用var来声明“[ ]”数组。示例:

//数组的创立
var sampleModels1: NSArray = [] //空数组
var sampleModels2 = [String]() //指定值类型的空数组
var sampleModels3 = ["前端" , "后端", "安卓", "iOS" ]//有默认值的数组
var sampleModels4 : [String] = ["前端" , "后端", "安卓", "iOS"]//指定类型且有默认值的数组

这儿科普一些知识点。

假如咱们要界说一个空数组,那么咱们直接“var sampleModels1 = [ ]”是不可的,在Swift言语中,空调集需求显现类型,而直接声明空调集会因为隐形转化而报错,因而需求界说空调集的类型为NSArray类型。

至于数组的可变性和衔接办法,和字符串的运用迥然不同。

因为数组是运用var声明的数组变量,因而在后面的代码中,咱们能够更新数组中的数据,而let声明的常量数组固定了就不能更改数据了,因而数组的创立根本都是用var声明的。

数组的运用

另外,数组的运算符、函数的运用和字符串的运用办法根本一致,示例:

//数组的运用
sampleModels4.count//取得数组中的数量
sampleModels4.isEmpty//判别数组是否为空
sampleModels4[0]//取得数组中的第一个数据
sampleModels4.append("文如秋雨")//在数组最终增加一个字符串
sampleModels4.insert("文如秋雨", at: 0)//在数组的第一个索引方位刺进一个字符串
sampleModels4.remove(at: 0)//移除数组中索引第一个方位中的数据
sampleModels4.removeLast()//移除数组中的最终一个数据

数组的遍历

Swift开发进程中,常常会界说好示例的数组数据,然后经过ForEach循环遍历数据展现在List列表上。示例:

//数组的遍历
struct ContentView: View {
// 界说数组,寄存数据
var appleSymbols = ["house.circle", "person.circle", "bag.circle", "location.circle", "bookmark.circle", "gift.circle", "globe.asia.australia.fill", "lock.circle", "pencil.circle", "link.circle"]
var body: some View {
// 列表遍历数组数据
List {
ForEach(appleSymbols.indices, id: \.self) { index in
Image(systemName: self.appleSymbols[index])
.resizable()
.foregroundColor(.gray)
.frame(width: 25, height: 25)
}
}
}
}

首要,咱们运用 var 声明晰一个字符串类型的数组变量appleSymbols,数组能够依据其内部元素而主动区分其类型。

然后,咱们运用了List列表和ForEach循环的办法遍历appleSymbols数组中的数据,在ForEach循环办法中,咱们用.indices取得数据的范围,appleSymbols.indices等同于0..appleSymbols.count

最终,咱们运用appleSymbols[index]索引数组中每一个元素,循环这个进程,就在List列表中ForEach循环遍历出了appleSymbols数组中的数据。

预览效果如下:

Swift实用小册04:数组、集合和字典的使用

调集的创立

调集,是一堆数据无序摆放的调集。

调集和数组概念和运用办法类型,数组是有序的调集,而调集本身是无序的数据的调集。示例:

//调集的创立
var exampleModels1 = Set<Character>()//空数组
var exampleModels2: Set<String> = [ ]//指定值类型的空数组
var exampleModels3: Set = ["前端工程师" , "后端工程师", "安卓工程师", "iOS工程师"]
var exampleModels4: Set = ["前端" , "后端", "安卓", "iOS"]//指定类型且有默认值的数组

上述代码中,调集和数组相同,也能依据字面量的数据,主动判别其类型。

调集的运用

调集的运用办法和数组根本相似,因为数组本便是有序摆放的调集,但调集由所以无序的,因而运用点也有些不同,调集常见的运用办法如下:

//调集的运用
exampleModels3.count//取得调集中的数量
exampleModels3.isEmpty//判别调集是否为空
exampleModels3.insert("文如秋雨")//在调集中刺进一个字符串
exampleModels3.remove("文如秋雨")//在调集中指定删去某个字符串
exampleModels3.contains("文如秋雨")//检查调集中是否包括某个特定值

上述代码中,咱们能够看到insert增加元素的办法,因为调集是无序的,因而不需求指定索引方位。

相同remove删去的办法,因为调集是无序的,删去需求指定某个特定值

调集的操作

在高中仍是大学的时分,咱们也学习过调集的相关操作:交集、不相交、并集、相对补集、子集

Swift实用小册04:数组、集合和字典的使用

调集中的操作和和数学逻辑上的调集运算根本相似,也有交集、不相交、并集、相对补集、子集几种运算办法。示例:

//调集的操作
exampleModels3.intersection(exampleModels4).sorted()//交集
exampleModels3.symmetricDifference(exampleModels4).sorted()//不相交
exampleModels3.union(exampleModels4).sorted()//并集
exampleModels3.subtracting(exampleModels4).sorted()//相对补集
exampleModels3.isSubset(of: exampleModels4)//判别exampleModels1数组中的一切值是否在exampleModels2数组里
exampleModels3.isSuperset(of: exampleModels4)//判别exampleModels1数组中的一切值是否在exampleModels2数组里,和上面是一个原理
exampleModels3.isDisjoint(with: exampleModels4)//判别两个数组有没有交集

上述代码中,咱们运用数学逻辑完成了两个调集之间的交互。这儿还运用到了一个概念,sorted排序

当咱们进行两个调集的运算后,调集内若没有参数时默认为升序排序。

isSubset子集、isSuperset超集都是为了判别A调集是否是B调集子集,即A调集中一切元素是不是被B调集包括

字典的创立

字典,也是一种无序的调集。和调集不同,它的字面量是以键值对的方法,表明办法和数组相似,运用“[ 键 : 值 ]”的方法。示例:

//字典的创立
var dictionaries: [Int: String] = [:]  //指定类型的空字典
var person1 = ["文如秋雨": "产品司理"]//有默认值的字典
var person2: [String: Int] = ["文如秋雨": 26]  //指定类型且有默认值的字典

Person1的状况和数组相同,假如字典的键值对是一种类型,那么体系会主动判别这个字典的类型。

字典的运用

字典的运用,也和数组、调集办法相似,但也有一些不同,咱们用一些比如来解说:

//字典的运用
person1.count//取得字典数据项的数量
person1.isEmpty//判别字典数据项是否为空
person1["文如秋雨"]//索引字典中特定的键
person1["文如秋雨"] = "产品司理"//字典会依据键值对判别键是否存在,假如不存在,则增加新的键值对到字典里,假如存在,则更新键的值
person1.updateValue("高级产品司理", forKey: "文如秋雨")//更新forKey指定的键对应的值
person1["文如秋雨"] = nil//移除字典中指定的键值对
person1.removeValue(forKey:"文如秋雨")//移除字典中指定的键值对

在学习数组、调集、字典时,咱们会发现许多办法根本相似,这时分其实咱们只需求回忆不同的部分,而这部分也恰恰是面试时考验面试者对于Swift言语把握程度的判别。

字典转化为数组

最终,咱们来了解下字典怎么转化为数组。

咱们能够发现字典和数组的区别,除了有序和无序外,字典有键和值,而数组能够说只要值。

假如咱们要将字典转化为数据,那么只需求把字典中的值的部分提取出来,就能够变成数组了。

//字典转化为数组
var person3 = ["文如秋雨": "产品司理" ,"文如秋雨": "iOS开发者"]
let dictValues = [String](person3.values)//dictValues = ["产品司理", "iOS开发者"]

上述代码中,dictValues最终的成果便是一个数组。

Swift实用小册04:数组、集合和字典的使用

以上便是本章的全部内容。

快来着手试试吧!

假如本专栏对你有协助,无妨点赞、评论、重视~