美文网首页
Swift--原生集合类型

Swift--原生集合类型

作者: 优雅的步伐 | 来源:发表于2019-09-28 20:56 被阅读0次
  • 数组

  • 字典

  • 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

相关文章

  • Swift--原生集合类型

    数组 字典 Set集合 数组 数组:是一串有序的由相同类型元素构成的集合。数组中的集合元素是有序的,可以重复出现。...

  • swift--集合类型4

    Swift 语言提供Arrays、Sets和Dictionaries三种基本的集合类型用来存储集合数据。数组(Ar...

  • ArrayList

    ArrayList源代码深入剖析 1、 集合中存放的是对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的...

  • swift--可选类型

    应用

  • Swift--可选类型

    在java中,一个基本类型在没有赋值的情况下,系统会为自动为其分配默认值,而一个引用的默认值则是null。而nul...

  • javaSE - 007 - 集合

    集合: 集合中只能放对象的引用,对于原生数据类型,会自动拆包和打包 1.List接口的2个实现类 ArrayLis...

  • Effective java笔记(四),泛型

    泛型为集合提供了编译时类型检查。 23、不要在代码中使用原生态类型 声明中具有一个或多个类型参数的类或接口统称为泛...

  • swift--值类型和引用类型

    结构体 我们声明一个结构体,如果没有初始化赋值,我们需要在创建的时候赋值.查看SIL 系统会自动帮我们生成初始化方...

  • iOS 深拷贝浅拷贝

    一,集合类型(NSArray、NSDictionary、NSSet等类型)与非集合类型(NSString等类型) ...

  • #python基础入门#04

    <组合数据类型> 集合类型序列类型(字符串,元组,列表)字典类型 集合类型:集合是多个元素的无序组合 特点:无序,...

网友评论

      本文标题:Swift--原生集合类型

      本文链接:https://www.haomeiwen.com/subject/hgoejctx.html