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

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

image.png

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

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


前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。


如有错误,以你为准。


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


image.png

数组的创建


数组,是一堆数据有序排列的集合。

和字符串使用的方法类型,我们可以用数据的字面量来构建数组,我们常用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数组中的数据。

预览效果如下:

image.png


集合的创建

集合,是一堆数据无序排列的集合。

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


//集合的创建
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删除的方法,由于集合是无序的,删除需要指定某个特定值


集合的操作


在高中还是大学的时候,我们也学习过集合的相关操作:交集、不相交、并集、相对补集、子集

image.png

集合中的操作和和数学逻辑上的集合运算基本类似,也有交集、不相交、并集、相对补集、子集几种运算方式。示例:


//集合的操作
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最后的结果就是一个数组。


image.png

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

快来动手试试吧!

相关文章
|
7月前
|
存储 Swift
在Swift编程语言中,字典(Dictionary)
在Swift编程语言中,字典(Dictionary)
85 3
|
7月前
|
存储 安全 Swift
在Swift中,数组(Array)
在Swift中,数组(Array)
60 3
|
1月前
|
存储 Swift iOS开发
Swift 数组
10月更文挑战第27天
24 3
|
1月前
|
存储 Swift iOS开发
Swift 字典
10月更文挑战第27天
24 2
|
7月前
|
存储 安全 Swift
【Swift开发专栏】Swift中的集合类型:数组、字典与集合
【4月更文挑战第30天】本文探讨Swift的三种内置集合类型:数组、字典和集合。数组是有序元素集合,支持动态大小调整和类型安全;字典是无序键值对,适用于快速查找;集合是无序不重复元素集合,适合检查元素存在性和集合运算。理解这些特性和用法能提升Swift编程效率。
72 1
|
7月前
|
Swift 索引
在Swift中,要删除数组中特定索引位置的元素
在Swift中,要删除数组中特定索引位置的元素
120 3
|
7月前
|
存储 安全 Swift
在Swift编程语言中,数组(Array)
在Swift编程语言中,数组(Array)
81 3
|
7月前
|
存储 Swift
在Swift编程语言中,字典(Dictionary)
在Swift编程语言中,字典(Dictionary)
436 3
|
7月前
|
Swift
在Swift中,创建一个Set集合
在Swift中,创建一个Set集合
74 1
|
7月前
|
存储 安全 Swift
在Swift编程语言中,数组
在Swift编程语言中,数组
60 2