数组,比如C语言数组:int ages[10] = {1, 5, 19, 29, 33};
再如:Person *p = [[Person alloc] init];
Person *perso[5] = {p, [[Person alloc] init]};
C语言数组,只能存放同一类型的数据,那如何存放不同类型的数据呢?这里就需要用到OC数组:NSArray了。
OC数组是不能存放nil值,OC数组只能存放OC对象,不能存放非OC对象类型,比如:int、struct、enum等。
那OC数组又是怎样创建的呢?
NSArray *array = [NSArray arrayWithObject:@"jack"];
NSArray *array2 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
这样的创建,工作量不说,大量降低了我们工作效率。
NSArray *array3 = @[@"jack", @"rose", @"212132"]; // 快速创建数组
数组有了,如何知道数组包含的元素个数?如果我们想查看数组,又如何操作呢?
NSLog(@"%ld", array3.count); // 数组元素个数
NSLog(@"%@", array3[0]); // 访问数组0上面的元素:@“jack”
这里可以看出OC数组的访问和C数组的访问,很类似。
有个数组:
Person *p = [[Person alloc] init];
NSArray *array = @[p, @"rose", @"jack"];
如何遍历这个数组呢?这让我们想到C语言中的for循环。
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@", array[i]);
}
那如果我遍历到某个元素之后,我不想遍历了,我们如何停下来?这可不象我们跑步,不想跑了就可以停下来的。
这里我们就需要用到block了。
[array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
if (idx == 1)
{
*stop = YES;
}
}];
每遍历到一个元素,就会调用一次block,并且将当前元素和索引位置当做参数传给block。
那天我突然想往数组中添加某元素,怎么办?NSArray,是不可变数组,也就是不能够添加或删改。这里就需要用到NSMutableArray:可变数组。
NSMutableArray *array = [NAMutableArray arrayWithObjects:@"rose", @"jim", nil];
添加元素:
[array addObject:@"jack"];
删除元素:
[array removeObject:@"rose"];
还有一个途径:
[array removeObjectAtIndex:1]; // 删除1位置上的元素:"jim"
@[]; 是创建数组的意思。但是它只能创建不可变数组:NSArray。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------