Swift -- 5.集合

数组

一个数组的元素的类型是一样的,不能有多种数据类型

使用var声明的是可变数组,let声明的是不可变数组

声明和创建

var arr1 : Array<String>

var arr2 : [Int]

var arr3 : [String]

arr1 = Array<String>()

arr2 = Array<Int>(count: 10, repeatedValue: 0)

arr2 = [0,1,2]

赋值和元素数

arr2[0] = 1

print(arr1.count)

添加和删除元素

arr1.append("spring")

arr1 = arr1 + ["summer"]

arr3 = ["win"]

arr1 += arr3

arr1.insert("fall", atIndex: 2)

let weather = arr1[0...1]

arr1[1...3] = ["2","3","4","5"]

arr1.removeAtIndex(4)

arr1.removeLast()

arr1.removeAll()

字典

一个字典中的key或value只能有一种类型,比如key是String类型,value是Int类型,不能value中包含多种类型

使用var声明的字典是不可变的,使用let声明的字典是可变的

//声明和实现

var myDic : Dictionary<String, String>

var scores :[String:Int]

var health : [String:String]

myDic = Dictionary<String, String>()

scores = Dictionary<String, Int>(minimumCapacity: 5)//创建包括5个key-value对的字典,感觉没啥用

print(scores.isEmpty)

health = ["height":"178", "weight":"80"]

var emptyDict:[String:Double] = [:]

//获取value值和赋值

print(health["height"])  //Optional("178")

print(health["height"]!) //178

//使用key来访问value的时候,返回的并非是字典中存储的value类型,而是value的可选类型,当key不存在的时候,返回的是nil

//需要使用返回的值的时候,需要加叹号来强制解析

print(health["noExit"]) //nil

health["blood"] = "78/112"

//updataValue可以返回之前存储的value,如果之前key不存在,则创建键值对

var result = scores.updateValue(20, forKey: "java")

print(result)//nil

print(scores)//["java": 20]

var java = scores.updateValue(30, forKey: "java")//

print(java)//20

print(scores)//["java": 30]

//for in遍历字典

for (name, num) in health

{

    print("(name)(num)")

}

print(health.keys)//LazyMapCollection<Dictionary<String, String>, String>(_base: ["height": "178", "weight": "80", "blood": "78/112"], _transform: (Function))

var keys = Array(health.keys)

print(keys)//["height", "weight", "blood"]

//删除键值对

health.removeValueForKey("height")

print(health)

health["blood"] = nil

print(health)//可以通知赋值为nil来删除键值对

health.removeAll()//删除所有键值对

集合的复制

Swift的集合都是结构体类型,这些结构体类型都是值类型的。

在值类型赋值或参数传递的过程中会复制副本,所赋的值或传递的参数,其实只是原数据的副本

Swift语言中与值类型对应的是引用类型,Swift的类才是引用类型,引用类型在赋值或传递参数过程中只是传递引用(也就是指针,不会复制对象的副本)

虽然集合与整形,浮点型,字符串等都是值类型,但是由于集合本身是一个容器,它会包含另外一些数据,因此集合的复制要稍微复杂一点

当集合包含的数据是值类型的时候,那么复制集合时,集合所包含的数据也会复制副本;如果集合包含的数据是引用类型,那么复制集合时,程序只是复制集合所包含的引用——这些引用实际所指向的对象并不会复制

原文地址:https://www.cnblogs.com/chebaodaren/p/5466256.html