数组的使用
定义不可变数组
let array1 = ["1","2","3"]
let array2: [String] = ["1","2","3"]
let array3: Array<String> = ["1","2","3"]
//可同时存放任意类型的数据
let array4 = [18,"20",1.88] as [Any]
let array5: [Any] = [18,"20",1.88]
let array6: Array<Any> = [18,"20",1.88]
定义可变数组
var arr1 = ["1","2","3"]
var arr2: [String] = ["1","2","3"]
var arr3: Array<String> = ["1","2","3"]
//可同时存放任意类型的数据
var arr4 = [18,"20",1.88] as [Any]
var arr5: [Any] = [18,"20",1.88]
var arr6: Array<Any> = [18,"20",1.88]
定义空数组
var datas1 = [String]()
var datas2: [String] = Array()
var datas3 = Array<String>()
var datas4: [String] = []
数组的基本操作
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//数组的基本操作
let arr = ["li","yanyan"]
//遍历
for data in arr {
print(data)
}
//添加 -- 通过下标
var arr1 = ["li","yanyan"]
print("数组容量 = \(arr1.capacity)")
arr1.append("xie")
print("数组容量 = \(arr1.capacity)")
arr1.append("aaa")
arr1.append("bbb")
print("数组容量 = \(arr1.capacity)")
print(arr1)
print("数组元素数量 = \(arr1.count)")
//往指定的index位置插入元素
arr1.insert("kkk", at: 2)
print(arr1)
print("数组元素数量 = \(arr1.count)")
//修改
arr1[0] = "wang"
print(arr1)
//删除第一个
arr1.removeFirst()
print(arr1)
//删除最后一个
arr1.removeLast()
print(arr1)
arr1.remove(at: 1)
print(arr1)
//删除所有元素,但保留容量空间
arr1.removeAll(keepingCapacity: true)
print(arr1)
//删除满足指定条件的数组元素
arr1.removeAll { (str: String) -> Bool in
return str == "a"
}
print("数组容量 = \(arr1.capacity)")
print("数组元素数量 = \(arr1.count)")
}
}
- 调试结果如下:

Snip20210425_70.png
-
for data in arr:数组元素的遍历; -
arr1.append:添加元素; -
arr1.insert("kkk", at: 2):往指定的index位置插入元素; -
arr1[0] = "wang":通过下标,修改数组元素; -
arr1.removeFirst():删除第一个元素; -
arr1.removeLast():删除最后一个元素; -
arr1.remove(at: 1):删除指定index位置的元素; -
arr1.removeAll(keepingCapacity: true):删除所有元素,但保留容量空间; -
arr1.capacity:获取数组的容量大小; -
arr1.count:获取数组元素的个数;
数组的容量
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//数组容量
//定义一个存放字符串的数组,并没有初始化分配内存空间
var arr:[String]
//需要初始化,分配内存空间才能添加数据元素
//arr.append("li")
arr = [String]()
print("数组容量 = \(arr.capacity)")
arr.append("li")
print(arr)
for i in 0..<10 {
arr.append("zhangsan\(i)")
print("添加元素" + arr[i] + "--数组容量 = \(arr.capacity)")
}
print(arr)
}
}

Snip20210425_72.png
-
var arr:[String]:定义一个存放字符串的数组,并没有初始化分配内存空间;需要初始化,分配内存空间才能添加数据元素,否则直接添加会报错; -
arr = [String]():初始化数组,此时的容量为0; - 在for循环中向可变数组中添加元素,看到数组容量以两倍之前的容量,进行
动态扩容,详情原理可见 [数据结构与算法03 -- 动态数组];(https://www.jianshu.com/p/f2b660b1e7dc)
数组的合并
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var arr1:[Any] = ["li","yanyan"]
let arr2 = ["xie","sf"]
let arr3 = ["haha",18] as [Any]
arr1 += arr2
arr1 += arr3
print(arr1)
}
}

Snip20210425_74.png
-
var arr1:[Any] = ["li","yanyan"]:定义并初始化一个存放任意类型的数组arr1; -
let arr2 = ["xie","sf"]:定义并初始化一个存放字符串的数组arr2; -
let arr3 = ["haha",18] as [Any]:定义并初始化一个存放任意类型的数组arr2; -
arr1 += arr2:将arr2中元素合并到arr1中; -
arr1 += arr3:将arr3中元素合并到arr1中; - 被合并数组中元素,必须要与目标数组中的元素类型一致,否则会报错;
字典的使用
定义字典的三种方式
var dict1 = ["name":"yanzi","age":"30","height":"175"]
var dict2: [String:String] = ["name":"yanzi","age":"30","height":"175"]
var dict3:Dictionary<String,String> = ["name":"yanzi","age":"30","height":"175"]
定义空字典的三种方式
var dic1 = [String:String]()
var dic2: [String:String] = [:]
var dic3: [String:String] = Dictionary()
var dic4: Dictionary<String,String> = [:]
字典的增删改
var dic1 = [String:String]()
//增
dic1["name"] = "yanzi"
dic1["age"] = "30"
dic1["height"] = "175"
for (key,value) in dic1 {
print("key \(key) -- value \(value)")
}
//删
dic1.removeValue(forKey: "name")
for (key,value) in dic1 {
print("key \(key) -- value \(value)")
}
字典的遍历
var dict1 = ["name":"yanzi","age":"30","height":"175"]
for (key,value) in dict1 {
print("key \(key) -- value \(value)")
}
字典的合并
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//字典的合并
var dic1:[String:Any] = ["name":"liyanyan","age":30]
let dic2:[String:Any] = ["title:":"haha","age":32]
//将dic2合并到dic1
for (k,v) in dic2 {
dic1[k] = v
}
print(dic1)
}
}

Snip20210425_75.png
- 通过循环的方式,实现字典之间的合并,合并的规则与设置字典的键值对一样,若key已存在,覆盖旧值,若key不存在,则新增键值对;