NSArray,NSMutableArray –Objective C数组

时间:2020-02-23 14:41:11  来源:igfitidea点击:

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类表示对象的无序集合。
    但是,它们将每个值与一个键相关联,键的作用类似于该值的标签。
    这对于建模对象对之间的关系很有用