初始化數(shù)組
//MARK : - 初始化數(shù)組
func demo()
{
//OC中數(shù)組分可變和不可變 NSMutableArray / NSArray
//swift中 可變數(shù)組(var) 不可變(let)
var array = [Int]()
print("初始容量 : \(array.capacity)")
for i in 0..<9
{
array.append(i)
print("\(array) 容量 : \(array.capacity)")
/*輸出結(jié)果: 插入元素 如果容量不夠會 *2 (提前預(yù)分配空間,提高效率)
初始容量 : 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.數(shù)組的定義
//MARK: - 數(shù)組的定義
func demo()
{
//Swift中定義數(shù)組和OC一樣,不過沒有 '@'
//自動推導(dǎo)的結(jié)果 let array: [String] -->表示數(shù)組中的元素都是string類型
let array1 = ["張三","李四","王五"]
print(array1) //輸出結(jié)果 : ["張三", "李四", "王五"]
//let array2: [Int] -->表示數(shù)組中的元素都是整形
//swift中基本數(shù)據(jù)類型不需要包裝
let array2 = [1,2,3,4,5]
print(array2) //輸出結(jié)果 : [1, 2, 3, 4, 5]
//CG 結(jié)構(gòu)體
let j = CGPoint(x: 100, y: 100)
//let array3: [CGPoint]
let array3 = [j]
print(array3) //輸出結(jié)果 : [(100.0, 100.0)]
//混合數(shù)組 (少用)
//let array4: [NSObject] (如果數(shù)組中的類型不一致,自動推導(dǎo)的結(jié)果為NSObject)
//在混合數(shù)組中 CG結(jié)構(gòu)體需要包裝
let array4 = ["馬六" , 4 , NSValue(cgPoint: j)]
print(array4) //輸出結(jié)果 : [馬六, 4, NSPoint: {100, 100}]
//在swift中還有一種類型 [AnyObject] -->任意對象
//在swift中 一個類可以沒有任何 ' 父類 ' AnyObject比NSObject的范圍更大
}
2.數(shù)組的遍歷
//MARK: -數(shù)組的遍歷
func demo()
{
let array1 = ["張三","李四","王五"]
//1.第一種方式 (按照下標(biāo)遍歷)
for i in 0..<array1.count
{
print(array1[i])
/* 輸出結(jié)果:
張三
李四
王五
*/
}
//2.第二種方式 (for in 遍歷元素)
for i in array1
{
print(i) //輸出結(jié)果與上相同
}
//3.第三種方式 (enum block 遍歷,同時遍歷下標(biāo)和內(nèi)容)
// i 的數(shù)據(jù)類型為元組 let i: (offset: Int, element: String)
for i in array1.enumerated()
{
print(i)
/* 輸出結(jié)果:
(0, "張三")
(1, "李四")
(2, "王五")
*/
//取出索引和內(nèi)容
print("\(i.offset) \(i.element)")
}
//4.第四種方式 (遍歷下標(biāo)和內(nèi)容2)
// a 為索引下標(biāo) b 為小標(biāo)對應(yīng)的元素 ( a / b 的名字可以自定義 )
for (a , b) in array1.enumerated()
{
print("\(a) \(b)")
/* 輸出結(jié)果:
2 王五
0 張三
1 李四
2 王五
*/
}
//5.第五種方式 (反向遍歷)
for i in array1.reversed()
{
print(i) //輸出結(jié)果同上,不過是反向
}
//6.第六種方式 (反向索引內(nèi)容)
// for ( c , d ) in array1.reversed().enumerated() //錯誤內(nèi)容 索引內(nèi)容不一致
for ( c , d ) in array1.enumerated().reversed()
{
print("\(c) \(d)")
}
}
3.數(shù)組的增-刪-改
//MARK: - 數(shù)組的增 刪 改
func demo3()
{
var array1 = ["張三","李四","王五"]
//追加元素
array1.append("田七")
print(array1) //輸出結(jié)果 : ["張三", "李四", "王五", "田七"]
//修改元素 通過下標(biāo)定位
array1[0] = "王八"
print(array1) //輸出結(jié)果 : ["王八", "李四", "王五", "田七"]
// array1[5] = "XXX" //數(shù)組越界
//刪除元素
// array1.remove(at: 1) //刪除指定下標(biāo)
// array1.removeAll() //刪除所有
// array1.removeLast() //刪除最后一個
// array1.removeFirst() //刪除第一個
array1.removeAll(keepingCapacity: true) //刪除全部并且保留空間
}
4.合并數(shù)組
//MARK: - 數(shù)組的合并
func demo()
{
//事例1
var array1 = ["張三","李四","王五"]
let array2 = ["馬六"]
//將array2的內(nèi)容合并到array1中
//注意 : 要合并數(shù)組的兩個類型必須一致
array1 += array2
print(array1) //輸出結(jié)果 : ["張三", "李四", "王五", "馬六"]
//事例2 (合并不同類型數(shù)據(jù))
var array3 : [NSObject] = ["張三","李四","王五"]
let array4 = ["馬六" , 100 ]
//要合并不同類型的數(shù)據(jù)必須聲明 [NSObject] ,如果array4為array4: [String] 類型,則編譯不通過,必須兩個都為NSObject類型數(shù)組
array3 += array4
print(array3) //輸出結(jié)果 : [張三, 李四, 王五, 馬六, 100]
}