持续创作,加快成长!这是我参加「日新方案 6 月更文挑战」的第4天,点击检查活动详情
在本章中,你将学会数组、调集和字典三种调集类型的常见运用办法。
前言
和Apple
官网或者网上共享的教程类文章不同,我将以实践开发视点叙述Swift
言语的一些概念和用法,方便大家更好地学习和把握Swift
言语。
这同时也是对自己学习Swift
言语进程的知识收拾。
如有过错,以你为准。
咱们新建一个PlayGround
文件,命名为SwiftTypeSet
。
数组的创立
数组,是一堆数据有序摆放的调集。
和字符串运用的办法类型,咱们能够用数据的字面量来构建数组,咱们常用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
数组中的数据。
预览效果如下:
调集的创立
调集,是一堆数据无序摆放
的调集。
调集和数组概念和运用办法类型,数组是有序的调集,而调集本身是无序的数据的调集。示例:
//调集的创立
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
删去的办法,因为调集是无序的,删去需求指定某个特定值
。
调集的操作
在高中仍是大学的时分,咱们也学习过调集的相关操作:交集、不相交、并集、相对补集、子集。
调集中的操作和和数学逻辑上的调集运算根本相似,也有交集、不相交、并集、相对补集、子集几种运算办法。示例:
//调集的操作
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
最终的成果便是一个数组。
以上便是本章的全部内容。
快来着手试试吧!
假如本专栏对你有协助,无妨点赞、评论、重视~