Swift-数组

来源:互联网 发布:那个软件可以制作菜单 编辑:程序博客网 时间:2024/06/05 03:15

一. 数组定义(比较 OC 与 Swift 的数组)

1.1. 有值数组
//oc 有值数组NSArray *arr0 = @[@1, @2, @3];NSArray *arr1 = [NSArray arrayWithObjects:@1, @2, @3, nil];NSLog(@"%@", arr1);/*输出结果:2016-01-06 01:04:49.180 test[11687:2096671] (    1,    2,    3)*/
//swift有值数组var arr0 = [1, 2, 3]var arr1: Array = [1, 2, 3]var arr2: Array<Int> = [1, 2, 3]var arr3: [Int] = [1, 2, 3]print(arr3)//输出结果: [1, 2, 3]
1.2. 空数组
//oc空数组NSArray *arr = @[];NSArray *arr1 = [NSArray array];NSLog(@"%@", arr1);/*输出结果:2016-01-06 01:06:04.132 test[11703:2106199] ()*/
//swift空数组var arr5 = []var arr6 = [Int]()var arr7 = Array<Int>()print(arr7)//输出结果: []
1.3. 可变与不可变数组
// ocNSArray       //不可变数组:NSMutableArray//可变数组:
// swift//可变数组:var arr8 = []//不可变数组:let arr9  = []
1.4. 元素类型
//OC:NSArray *arr = @[@1, @"cdh", @130];NSLog(@"%@", arr);/*输出结果:2016-01-06 01:13:07.987 test[11891:2163044] (    1,    cdh,    130)*/
//swift: (常用写法)var arr = [1, "CDH", 130]  // 编译器自行推导出 arr : [NSObject]print(arr)//输出结果: [1, CDH, 130]
//如果想明确表示数组中存放的是不同类型的数据//可以使用Any 或者 NSObject 关键字, 表示数组中可以存放不同类型的数据var arr10:Array<Any> = [1, "CDH", 130] // 存放的字符串是带有双引号的print(arr10)//输出结果: [1, "CDH", 130] // 注意 打印出来的字符串是带有双引号的var arr12 : [NSObject] = [2, "cdh", 18]print(arr12)//输出结果:[2, cdh, 18]
//指定数组当中只能存放Int型,如果存放其它类型会直接报错var arr14:Array<Int> = [1, 10, 130]print(arr14)//输出结果: [1, 10, 130]var arr15:[Int] = [1,2,3]print(arr15)//输出结果: [1, 2, 3]

二. 数组操作

2.1. 获取长度
//OC:NSArray *arr = @[@1, @2, @3];NSLog(@"%tu", arr.count);//输出结果: 2016-01-06 01:19:54.874 test[12086:2209180] 3
//swift:var arr = [1, 2, 3]print(arr.count)//输出结果:3
2.2. 判断是否为空
//OC:NSArray *arr = @[];NSLog(@"result = %d", arr.count != 0);//输出结果: 2016-01-06 01:25:14.252 OCTest[12249:2255010] result = 0
var arr1 = [1, 2, 3]print(arr1.isEmpty)//输出结果: false
  • 注意: 只有该数组有指定的存储类型,或者数组中有元素才能使用 isEmpty 这个方法, 不然会报错, 比如:
var arr = []  // 这是个空的数组, 而且有没有指定类型, 只表示为 Array 类型print(arr.isEmpty) // 是会报错的
2.3. 检索
//OC:NSArray *arr = @[@1, @2, @3];NSLog(@"%@", arr[0]);//输出结果: 2016-01-06 01:26:46.816 OCTest[12275:2269853] 1
//swift:var arr2 = [1, 2, 3]print(arr2[0])//输出结果: 1
2.4. 追加
//OC:NSMutableArray *arr =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];[arr addObject:@4];NSLog(@"%@", arr);/*输出结果:2016-01-06 01:28:47.111 OCTest[12297:2286198] (    1,    2,    3,    4)*/
//swift:var arr3 = [1, 2, 3]arr3.append(4);print(arr3)//输出结果: [1, 2, 3, 4]var arr4 = [1, 2, 3]arr4 += [4]print(arr4)//输出结果: [1, 2, 3, 4]var arr5 = [1, 2, 3]arr5 += [4]arr5 += [5,6,7]//输出结果: [1, 2, 3, 4, 5, 6, 7]var arr6 = [1, 2, 3]arr6 += [4]arr6 += [5,6,7]arr6 += arr6[0...3]print(arr6)//输出结果: [1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4]
2.5. 插入
//OC:NSMutableArray *arr =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];[arr insertObject:@4 atIndex:0];NSLog(@"%@", arr);/*输出结果:2016-01-06 01:36:10.450 OCTest[12374:2339079] (    4,    1,    2,    3)*/
//swift:var arr7 = [1, 2, 3]arr7.insert(4, atIndex: 0);print(arr7)//输出结果: [4, 1, 2, 3]
2.6. 更新
//OC:NSMutableArray *arr =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];arr[0] = @8;NSLog(@"%@", arr);/*输出结果:2016-01-06 01:37:28.482 OCTest[12397:2350177] (    8,    2,    3)*/
//swift:var arr8 = [1, 2, 3]arr8[0] = 8print(arr8)//输出结果: [8, 2, 3]
2.7. 删除
//OC:NSMutableArray *arr1 =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];[arr1 removeObject:@1];NSLog(@"%@", arr1);NSMutableArray *arr2 =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];[arr2 removeLastObject];NSLog(@"%@", arr2);NSMutableArray *arr3 =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];[arr3 removeAllObjects];NSLog(@"%@", arr3);/*输出结果:2016-01-06 01:39:49.831 OCTest[12418:2370779] (    2,    3)2016-01-06 01:39:49.832 OCTest[12418:2370779] (    1,    2)2016-01-06 01:39:49.832 OCTest[12418:2370779] ()*/
//swift:var arr9 = [1, 2, 3]arr9.removeAtIndex(0)print(arr9)// 输出结果:[2, 3]var arr10 = [1, 2, 3]arr10.removeLast()print(arr10)// 输出结果:[1, 2]var arr11 = [1, 2, 3]//是否保持容量, 如果为true, 即便删除了容量依然存在, 容量是2的倍数arr11.removeAll(keepCapacity: false)print(arr11)print(arr11.capacity)//输出结果://[]//0
2.8. Range
//OC:NSMutableArray *arr =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];[arr removeObjectsInRange:NSMakeRange(0, 2)];NSLog(@"%@", arr);/*输出结果:2016-01-06 01:43:17.863 OCTest[12441:2396986] (    3)*/
//swift:var arr12 = [1, 2, 3]arr12.removeRange(Range(start: 1, end: 2))// 这里3.0 之后就不能用这个 Range(start: , end: )方法了 而是推荐使用 range = ..< 这样的取范围print(arr12)//输出结果: [1, 3]var arr13 = [1, 2, 3]arr13.removeRange(0...0)print(arr13)//输出结果: [2, 3]var range14 = 0...5print(range14)//输出结果: 0..<6

三. 数组的其它操作

3.1. 数组的批量操作
//OC:NSMutableArray *arr =[NSMutableArray arrayWithObjects:@1, @2, @3, nil];NSRange range = NSMakeRange(0, 2);[arr replaceObjectsInRange:range     withObjectsFromArray:@[@99, @88, @77, @66]];NSLog(@"%@", arr);/*输出结果:2016-01-06 14:56:45.493 OCTest[3599:667081] (    99,    88,    77,    66,    3)*/
//swift:var arr = [1, 2, 3]arr.replaceRange(1..<2, with: [99, 88, 77, 66])print(arr)//输出结果: [1, 99, 88, 77, 66, 3]
var arr1 = [1, 2, 3]arr1.replaceRange(Range(start: 0, end: 2), with: [99, 88, 77, 66])print(arr1)//输出结果: [99, 88, 77, 66, 3]
3.2. 遍历
//OC:NSArray *arr = @[@1, @2, @3];for (int i = 0; i < arr.count; i++) {   NSLog(@"%@", arr[i]);}/*输出结果:2016-01-06 15:00:10.702 OCTest[3635:694273] 12016-01-06 15:00:10.703 OCTest[3635:694273] 22016-01-06 15:00:10.703 OCTest[3635:694273] 3*/NSArray *arr = @[@1, @2, @3];for (NSNumber *number in arr) {     NSLog(@"%@", number);}/*输出结果:2016-01-06 15:03:43.192 OCTest[3684:723081] 12016-01-06 15:03:43.193 OCTest[3684:723081] 22016-01-06 15:03:43.194 OCTest[3684:723081] 3*/
//swift:var arr2 = [1, 2, 3]// 这种写法将在 swift3.0 被移除, 不能被使用for var i = 0 ; i < arr2.count ; i++{    print(arr2[i])}// 推荐的使用一下三种方法for i in 0  ..< arr2.count{    print(arr2[i])}for number in arr2{    print(number)}//指定起始范围for number in arr2[0..<3]{    print(number)}//输出结果都是://1//2//3

0 0