NSArray,NSMutableArray –Objective C数组
NSArray和NSMutableArray是Objective C数组对象。
在本教程中,我们将在基本级别上讨论NSArray以及该类中可用的各种功能。
NSArray帮助我们在Objective C编程中创建静态数组。
之前我们研究了NSNumber和NSString
NSArray NSMutableArray
NSArray是Objective-C的通用数组类型。
它代表对象的有序集合。
NSArray是不可变的,因此我们无法动态添加或者删除项目。
本教程的第二部分将讨论其可变的NSMutableArray。
NSArray示例
可以使用@ []语法将不可变数组定义为文字。
创建数组的另一种方法是使用" arrayWithObjects:"方法。
这两种方法如下所示:
NSArray *colors = @[@"Red", @"Yellow", @"Orange", @"Green", @"Blue", @"Violet"]; NSArray *cities = [NSArray arrayWithObjects:@"New Delhi", @"London", @"Brisbane", @"Adelaide", nil]; NSLog(@"colors array displayed: %@", colors[0]); NSLog(@"cities array displayed: %@", [cities objectAtIndex:0]);
" objectAtIndex:"是从数组访问元素的标准方法。
count方法用于获取数组中元素的数量。
枚举NSArray
可以使用以下两种类型中的任何一种来枚举数组:
NSArray *colors = @[@"Red", @"Yellow", @"Orange", @"Green", @"Blue", @"Violet"]; for (NSString *item in colors) { NSLog(@"%@", item); } for (int i=0; i<[colors count]; i++) { NSLog(@"%d: %@", i, colors[i]); }
比较目标C数组
isEqualToArray:用于比较两个NSArray。
如果两个数组包含相同数量的元素,并且每对都通过" isEqual:"测试,则返回YES。
NSArray *colors = @[@"Red", @"Yellow", @"Orange", @"Green", @"Blue", @"Violet"]; NSArray *same_colors = [NSArray arrayWithObjects:@"Red", @"Yellow", @"Orange", @"Green", @"Blue", @"Violet",nil]; if ([colors isEqualToArray:same_colors]) { NSLog(@"Success! Both the arrays are same"); }
注意:要检查NSArray中是否存在给定的元素,可以使用containsObject:
方法,并将字符串文字作为参数传递。
为了检索NSArray元素的索引,使用了indexOfObject:方法。
这将返回所请求对象的第一个匹配项的索引,如果未在数组中,则返回NSNotFound。
下面的代码段提供了一个示例。
在XCode中尝试一下!
NSArray *colors = @[@"Red", @"Yellow", @"Orange", @"Green", @"Blue", @"Violet"]; //BOOL checking if ([colors containsObject:@"Red"]) { NSLog(@"Red is an element of colors array"); } //Index checking NSUInteger index = [colors indexOfObject:@"Red"]; if (index == NSNotFound) { NSLog(@"Well that's not found"); } else { NSLog(@"Red is an element of colors array and is at index %ld", index); }
结合NSArrays
可以通过arrayByAddingObjectsFromArray:组合数组。
这将返回一个包含原始数组中所有元素的新数组,以及作为参数传递的数组。
NSArray *colors = @[@"Red", @"Yellow", @"Orange", @"Green", @"Blue", @"Violet"]; NSArray *moreColors = @[@"Indigo", @"Black", @"White", @"Grey"]; NSArray *allColors = [colors arrayByAddingObjectsFromArray:moreColors]; NSLog(@"%@", allColors);
字符串转换
componentJoinedByString:方法将数组的每个元素连接成一个字符串,由参数中指定的分隔符分隔。
以下片段实现相同。
NSArray *colors = @[@"Red", @"Yellow", @"Orange", @"Green", @"Blue", @"Violet"]; NSLog(@"%@", [colors componentsJoinedByString:@", "]);
NSMutableArray
NSMutableArray类允许我们从集合中的任意位置动态添加或者删除项目。
以下片段显示了创建可变数组的示例:
NSMutableArray *sports = [NSMutableArray arrayWithObjects: @"Cricket", @"Football", @"Hockey", @"Table Tennis", nil];
我们可以使用" array"或者" arrayWithCapacity:"类方法创建空的可变数组。
为了从一个不可变数组创建一个可变数组,我们可以将不可变数组传递给arrayWithArray:
类方法。
从NSArray添加和删除对象
操纵数组内容的两种基本方法是" addObject:"和" removeLastObject"方法,这些方法很容易说明。
下面的代码片段实现了相同的功能。
NSMutableArray *sports = [NSMutableArray arrayWithObjects: @"Cricket", @"Football", @"Hockey", @"Table Tennis", nil]; [sports addObject:@"Basketball"]; NSLog(@"%@", sports); //Basketball added to end [sports removeLastObject]; NSLog(@"%@", sports); //Basketball removed from end
其他集合类
NSSet和NSDictionaries是Foundation Framework的另外两个众所周知的集合类。
- NSSet类表示不同对象的静态无序集合。
集主要针对成员资格检查进行了优化 - NSDictionary类表示对象的无序集合。
但是,它们将每个值与一个键相关联,键的作用类似于该值的标签。
这对于建模对象对之间的关系很有用