Swift--原生集合类型

  • 数组

  • 字典

  • Set集合

数组

数组:是一串有序的由相同类型元素构成的集合。数组中的集合元素是有序的可以重复出现数组更关心元素是否有序,而不关心是否重复

var studentList1: Array<String> = ["张三","李四", "王五", "董六"]  //可变数组
//也可以写成下面这样 (Swift编译器会根据赋值的初始值,自动推断出来数组是字符串的数组类型)
//var studentList1 = ["张三","李四", "王五", "董六"]

var studentList2: [String] = ["张三","李四", "王五", "董六"] //可变数组

let studentList3: Array<String> = ["张三","李四", "王五", "董六"]   //不可变数组

var studentList4 = [String]() //数组是一个结构体,结构体具有构造函数。
可变数组

var声明的数组是可变数组,如果初始化之后不再修改数组,应该将数组声明为let的,即不变的数组。
对可变数组中的元素进行追加、插入、删除和替换等修改操作。
追加元素可以使用数组append(:)方法、+和+=操作符实现, +和+=操作符能将两个数组合并一起。插入元素可以使用数组的insert(:at)方法实现, 删除元素可以使用数组的remove(at:)方法实现。

////可变数组
var studentList: [String] = ["张三","李四", "王五"]
print(studentList) //输出结果:["张三", "李四", "王五"]


//使用append追加元素
studentList.append("董六")
print(studentList) //输出结果:["张三", "李四", "王五", "董六"]

//使用+=对两个数组进行连接
studentList += ["刘备", "关羽"]
print(studentList)//输出结果:["张三", "李四", "王五", "董六", "刘备", "关羽"]

//使用insert插入元素
studentList.insert("诸葛亮", at: 1)
print(studentList)//输出结果:["张三", "诸葛亮", "李四", "王五", "董六", "刘备", "关羽"]

//使用remove删除元素
 let removeStudent = studentList.remove(at: 0) //remove之后是有返回值的
print(studentList)//输出结果:["诸葛亮", "李四", "王五", "董六", "刘备", "关羽"]
print(removeStudent)//输出结果:张三

//替换
studentList[0] = "张飞"
print(studentList)//输出结果:["张飞", "李四", "王五", "董六", "刘备", "关羽"]
数组遍历

数组最常用的操作是遍历,就是将数组中的每一个元素取出来,进行操作或计算。整个遍历过程与循环分不开,我们可以使用for-in循环进行遍历。

////数组遍历

for item in studentList {
    print(item)
}

//enumerated 方法可以获得一个元组类型(索引,元素)
for (index, value) in studentList.enumerated(){
    print("index=\(index): value=\(value)")
}

输出结果如下:


image.png

字典

字典的声明与初始化

字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合可以,键和值是成对出现的。

字典声明和初始化

声明一个Dictionary类型的时候可以使用下面语句之一:
var studentDictionary1: Dictionary<Int, String>
var studentDictionary2: [Int: String]

var studentDictionary1: Dictionary<Int, String> = [102 : "张三", 103: "李四", 104: "王五"]

var studentDictionary2: [Int : String] = [102 : "张三", 103: "李四", 104: "王五"]

//省略类型,直接赋值
var studentDictionary3 = [102 : "张三", 103: "李四", 104: "王五"]

//实例化空的字典, 方法一
var studentDictionary4 = Dictionary<Int, String>()

//实例化空的字典, 方法二
var studentDictionary5 = [Int : String]()
可变字典
  • var 声明的字典是可变字典,如果初始化之后不再修改字典,应该将字典声明为let的,即不变的字典。
  • 1、字典元素追加,只要给一个不存在的键赋一个有效值,就会追加一个“键值”对元素。
  • 2、字典元素删除有两种方法:一种是给一个键赋值为nil, 这样就可以删除元素;一种是通过字典的removeValue(forKey:)方法删除元素。
  • 3、字典元素替换两种方法:一种是直接给一个存在的键赋值,这样值就会替换旧值;另一种方法是通过updateValue(_:forKey:)方法替换,方法的返回值是要替换的值。

////可变字典
var studentDictionary = [102 : "张三", 105: "李四", 109: "王五"]

//追加
studentDictionary[110] = "董六"
print(studentDictionary)//输出:[105: "李四", 110: "董六", 109: "王五", 102: "张三"]
print(studentDictionary.count)//输出:4

//删除1
studentDictionary[105] = nil
print(studentDictionary) //输出:[110: "董六", 109: "王五", 102: "张三"]

//删除2
let delStudent = studentDictionary.removeValue(forKey: 102)
print(studentDictionary) //输出:[110: "董六", 109: "王五"]
print(delStudent!)  //输出:张三

//替换1
studentDictionary[109] = "小七"
print(studentDictionary) //输出:[110: "董六", 109: "小七"]

//替换2
let updateStudent = studentDictionary.updateValue("小八", forKey: 110)
print(studentDictionary) //输出:[110: "小八", 109: "小七"]
print(updateStudent!)    //输出:董六

注意:如果不需要关心删除或替换的返回值的情况下,优先考虑 删除1 的方法和替换1的方法,简单方便。

字典遍历

字典遍历集合也是字典的重要操作。与数组不同,字典有两个集合,因此遍历过程可以只遍历值得集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都是通过for-in循环实现的。

//遍历键集合 ---  keys获得键集合
for studentID in studentDictionary.keys {
    print("学号:\(studentID)")
}

//遍历值集合 --- values获得值集合
for studentName in studentDictionary.values {
    print("学生:\(studentName)")
}

//遍历键值对集合 --- (studentId, studentName)元组类型

for (studentId, studentName) in studentDictionary {
    print("学号:\(studentId) 学生:\(studentName)")
}

Set

Swift中Set集合是由一串无序的不能重复的 相同类型元素构成的集合。

如果与数组比较,数组中的元素是有序的,可以重复出现,而Set中是无序的,不能重复的元素。数组强调的是有序,Set强调的是不重复。当不考虑顺序,而且没有重复的元素时,Set和数组可以互相替换。

Set声明和初始化

在声明一个Set类型时可以使用下面的语句
var studentList: Set<String>
声明Set类型时没有像数组那样的简化写法,如数组字符串[String]。

//Set的声明和初始化
let studentList5: Set<String> = ["张三", "李四", "王五", "董六"]
var studentList6 = Set<String>() //构造函数

let studentList7 = ["张三", "李四", "王五", "董六"]  //系统自动推导出来是数组集合的,而不是Set集合的
let studentList8:[String] = ["董六", "张三", "李四", "王五"]

let studentList9: Set<String> = ["董六", "张三", "李四", "王五"]

print(studentList7 == studentList8)//输出:false,(studentList7和studentList8都是数组集合,但元素顺序不同)

print(studentList5 == studentList9)//输出:true,(studentList5和studentList9都是Set集合,元素内容相同,无重复内容,与顺序无关)

注: 如果两个集合元素内容一样,元素顺序不同,那么它们也是相等的。 即:Set集合["张三", "李四", "王五", "董六"] 等于 Set集合 ["董六", "张三", "李四", "王五"]

可变Set集合
  • var声明的Set集合是可变的,如果初始化之后不再修改,应该将Set集合声明为let的,即不变的Set集合。
  • 我们可以对可变Set集合的元素进行插入和删除等修改操作。
  • 1、插入元素:可以使用集合的insert(_:)方法实现。
  • 2、删除元素:可以使用集合的removeFirst()和remove(_:)方法实现。

////可变Set集合
var studentList10: Set<String> = ["张三", "李四", "王五", "董六"]
print(studentList10) //输出:["董六", "李四", "张三", "王五"]

//删除 removeFirst的删除具有随机性
let removeStudent2 = studentList10.removeFirst()
print(removeStudent2)  //输出:王五
print(studentList10)   //输出:["李四", "董六", "张三"]

//删除
studentList10.remove("张三")
print(studentList10)  //输出:["李四", "董六"]

//插入
studentList10.insert("张三")
print(studentList10) //输出:["李四", "董六", "张三"]

//使用contains来判断是否包含某个元素
if studentList10.contains("张三") {
    print("OK")     //输出:OK
}
Set集合遍历

Set集合最常用的操作是遍历,就是将数组中的每一个元素取出来,以便进行操作或计算。整个遍历过程与循环分不开,我们可以使用for-in 进行循环遍历。

////Set遍历

var studentList11: Set<String> = ["张三", "李四", "王五", "董六"]

for item in studentList11 {
    print(item)
}

for (index, value) in studentList11.enumerated() {
    print("index = \(index) : value = \(value)")
}

输出结果如下:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift 语言提供Arrays、Sets和Dictionaries三种基本的集合类型用来存储集合数据。数组(Ar...
    穷人家的孩纸阅读 640评论 3 2
  • Swift 语言提供Arrays、Sets和Dictionaries三种基本的集合类型用来存储集合数据。数组(Ar...
    CDLOG阅读 487评论 0 1
  • 案例代码下载 集合类型 Swift提供三种主要的集合类型,为数组,集合和字典,用于存储集合值。数组是有序的值集合。...
    酒茶白开水阅读 468评论 0 0
  • 集合类型 Swift提供了三种主要的集合类型,称为数组,集合和字典,用于存储值的集合。数组是有序的值集合。集合是唯...
    Fuuqiu阅读 857评论 0 0
  • 在2015年的时候,我一度做了很多不织布手工,那时候不是因为我是一时兴趣做了很多作品,也不是因为我很喜欢,是因为应...
    爱学习的橙子老师阅读 215评论 0 0

友情链接更多精彩内容