初始化数组
//MARK : - 初始化数组
func demo()
{
//OC中数组分可变和不可变 NSMutableArray / NSArray
//swift中 可变数组(var) 不可变(let)
var array = [Int]()
print("初始容量 : \(array.capacity)")
for i in 0..<9
{
array.append(i)
print("\(array) 容量 : \(array.capacity)")
/*输出结果: 插入元素 如果容量不够会 *2 (提前预分配空间,提高效率)
初始容量 : 0
[0] 容量 : 2
[0, 1] 容量 : 2
[0, 1, 2] 容量 : 4
[0, 1, 2, 3] 容量 : 4
[0, 1, 2, 3, 4] 容量 : 8
[0, 1, 2, 3, 4, 5] 容量 : 8
[0, 1, 2, 3, 4, 5, 6] 容量 : 8
[0, 1, 2, 3, 4, 5, 6, 7] 容量 : 8
[0, 1, 2, 3, 4, 5, 6, 7, 8] 容量 : 16
*/
}
}
1.数组的定义
//MARK: - 数组的定义
func demo()
{
//Swift中定义数组和OC一样,不过没有 '@'
//自动推导的结果 let array: [String] -->表示数组中的元素都是string类型
let array1 = ["张三","李四","王五"]
print(array1) //输出结果 : ["张三", "李四", "王五"]
//let array2: [Int] -->表示数组中的元素都是整形
//swift中基本数据类型不需要包装
let array2 = [1,2,3,4,5]
print(array2) //输出结果 : [1, 2, 3, 4, 5]
//CG 结构体
let j = CGPoint(x: 100, y: 100)
//let array3: [CGPoint]
let array3 = [j]
print(array3) //输出结果 : [(100.0, 100.0)]
//混合数组 (少用)
//let array4: [NSObject] (如果数组中的类型不一致,自动推导的结果为NSObject)
//在混合数组中 CG结构体需要包装
let array4 = ["马六" , 4 , NSValue(cgPoint: j)]
print(array4) //输出结果 : [马六, 4, NSPoint: {100, 100}]
//在swift中还有一种类型 [AnyObject] -->任意对象
//在swift中 一个类可以没有任何 ' 父类 ' AnyObject比NSObject的范围更大
}
2.数组的遍历
//MARK: -数组的遍历
func demo()
{
let array1 = ["张三","李四","王五"]
//1.第一种方式 (按照下标遍历)
for i in 0..<array1.count
{
print(array1[i])
/* 输出结果:
张三
李四
王五
*/
}
//2.第二种方式 (for in 遍历元素)
for i in array1
{
print(i) //输出结果与上相同
}
//3.第三种方式 (enum block 遍历,同时遍历下标和内容)
// i 的数据类型为元组 let i: (offset: Int, element: String)
for i in array1.enumerated()
{
print(i)
/* 输出结果:
(0, "张三")
(1, "李四")
(2, "王五")
*/
//取出索引和内容
print("\(i.offset) \(i.element)")
}
//4.第四种方式 (遍历下标和内容2)
// a 为索引下标 b 为小标对应的元素 ( a / b 的名字可以自定义 )
for (a , b) in array1.enumerated()
{
print("\(a) \(b)")
/* 输出结果:
2 王五
0 张三
1 李四
2 王五
*/
}
//5.第五种方式 (反向遍历)
for i in array1.reversed()
{
print(i) //输出结果同上,不过是反向
}
//6.第六种方式 (反向索引内容)
// for ( c , d ) in array1.reversed().enumerated() //错误内容 索引内容不一致
for ( c , d ) in array1.enumerated().reversed()
{
print("\(c) \(d)")
}
}
3.数组的增-删-改
//MARK: - 数组的增 删 改
func demo3()
{
var array1 = ["张三","李四","王五"]
//追加元素
array1.append("田七")
print(array1) //输出结果 : ["张三", "李四", "王五", "田七"]
//修改元素 通过下标定位
array1[0] = "王八"
print(array1) //输出结果 : ["王八", "李四", "王五", "田七"]
// array1[5] = "XXX" //数组越界
//删除元素
// array1.remove(at: 1) //删除指定下标
// array1.removeAll() //删除所有
// array1.removeLast() //删除最后一个
// array1.removeFirst() //删除第一个
array1.removeAll(keepingCapacity: true) //删除全部并且保留空间
}
4.合并数组
//MARK: - 数组的合并
func demo()
{
//事例1
var array1 = ["张三","李四","王五"]
let array2 = ["马六"]
//将array2的内容合并到array1中
//注意 : 要合并数组的两个类型必须一致
array1 += array2
print(array1) //输出结果 : ["张三", "李四", "王五", "马六"]
//事例2 (合并不同类型数据)
var array3 : [NSObject] = ["张三","李四","王五"]
let array4 = ["马六" , 100 ]
//要合并不同类型的数据必须声明 [NSObject] ,如果array4为array4: [String] 类型,则编译不通过,必须两个都为NSObject类型数组
array3 += array4
print(array3) //输出结果 : [张三, 李四, 王五, 马六, 100]
}