方法:
array....
NSArray* array=[NSArray arrayWithObjects:@"1",@"2", nil];
[array objectAtIndex:0];
[array lastObject];
NSArray* arr1=[array objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(2, 3)]];
//获取索引从2~5的元素组成的新集合
//获取元素在集合中的位置
[array indexOfObject:@"1"];//array[1] 只在IOS 5.0以上
[array indexOfObject:@"1" inRange:NSMakeRange(2, 4)];//在2~4范围内,元素的位置
array=[array arrayByAddingObject:@"suwukong"];//想数组的最后追加一个元素,原NSArray本身并没有改变,只是蒋欣返回的NSArray赋给array
array=[array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"13",@"132", nil]];//向array数组的最后追加另一个数组的所有元素
NSIndexSet集合与NSSet集合的功能基本相似,区别只是NSIndexSet集合主要用于保存索引值,因此,他的集合元素都是NSUInteger对象。
NSNotFound 9223372036854775807
NSArraay 怎么判断哪集合是否包含指定元素呢?
只有某个集合元素与被查找元素通过isEqual:方法比较返回YES,并不需要两个元素是同一个元素
enumerateObjectsUsingBlock遍历
enumerateObjectsWithOptions:UsingBlock:遍历集合中的所有元素,并以此使用元素来执行指定的代码块,可传入额外参数,控制遍历选项,如反向遍历
enumerateObjectsAtIndexes:options:usingBlock: 遍历集合中指定范围元素,并以此使用元素来执行指定的代码块,控制遍历选项,如反向遍历
NSArray* array=[NSArray arrayWithObjects:
[[FKPreson alloc] initWithName:@"sun"],
[[FKPreson alloc] initWithName:@"hu"],
[[FKPreson alloc] initWithName:@"lin"],
nil];
[array makeObjectsPerformSelector:@selector(work)
withObject:@"下午好"];
NSString* content=@"疯狂IOS讲义";
//迭代集合内指定范围内的元素,病史钙元素执行代码块
[array enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 1)] options:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"第%ld个元素:%@",idx,obj);
[obj work];
}];
7.5.3 对NSArray进行排序
NSArray提供了大量以sort开头的排序方法
常用:
1。sortedArrayUsingFunction:context:; 必须返回NSOrderedDescending,NSOrderedAscending、NSOrderedSame这些枚举值,用于代表集合元素的大小,返回一个排好序的心NSArray对象 NSString 自带的compare:方法,根据字符对应的编码
2.sortedArrayUsingSelector:该方法使用集合元素自身的方法堆积和元素排序同样必须返回NSOrderedDescending,NSOrderedAscending、NSOrderedSame这些枚举值,用于代表集合元素的大小,返回一个排好序的心NSArray对象
3.sortedArrayUsingComparator:该方法使用代码块对必须返回NSOrderedDescending,NSOrderedAscending、NSOrderedSame这些枚举值,用于代表集合元素的大小,返回一个排好序的心NSArray对象 为第一个的简化版
1 自然排序 2和3 可自定义比较规则 称为定制排序
NSInteger intSort(id num1,id num2,void *context){
int v1=[num1 intValue];
int v2=[num2 intValue];
if (v1
return NSOrderedAscending;
}
if (v1>v2) {
return NSOrderedDescending;
}else{
return NSOrderedSame;
}
}
NSArray* array1=[NSArray arrayWithObjects:
@"Objective-c",
@"C",
@"C++",
@"Ruby",
@"Perl",nil];
array1=[array1 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",array1);
NSArray* array2=[NSArray arrayWithObjects:
[NSNumber numberWithInt:20],
[NSNumber numberWithInt:35],
[NSNumber numberWithInt:21],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:15],
nil];
array2=[array2 sortedArrayUsingFunction:intSort context:nil];
NSLog(@"%@",array2);
NSArray* array3=[array2 sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
if ([obj1 intValue]<[obj2 intValue]) {
return NSOrderedAscending;
}
if ([obj1 intValue]> [obj2 intValue]) {
return NSOrderedDescending;
}
return NSOrderedSame;
}];
NSLog(@"%@",array3);
7.5.4 使用枚举器遍历NSArray集合元素
1.objectEnumerator: 返回NSArray集合的顺序枚举器
2.reverseObjectEnumerator: 返回NSArray集合的逆序枚举器
NSEnumerator枚举器:
allObjects:获取被枚举集合中的所有元素
nextObject;下一个 知道该方法返回nil 结束循环
NSArray* array2=[NSArray arrayWithObjects:
[NSNumber numberWithInt:20],
[NSNumber numberWithInt:35],
[NSNumber numberWithInt:21],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:15],
nil];
NSEnumerator* en=[array2 objectEnumerator];//正序
id object;
while (object=[en nextObject]) {
NSLog(@"%@",object);
}
en =[array2 reverseObjectEnumerator];
while (object=[en nextObject]) {
NSLog(@"%@",object);
}
7.5.5 快速枚举(for..in)
for(type variableName in collection)
{
//variableName 自动得带访问每个元素
}
for (id obj in array2) {
NSLog(@"%@",obj);
}
}
7.5.6 可变数组(NSMutableArray)
NSArray 只是保存对象的指针,因此,NSArray 只保证这些指着那边两种的地址不能改变,但指针变量所指向的对象是可以改变的。
添加 -add
删除 -remove
替换 -replace
排序 -sort
排序与NSArray不通的是 NSMutableArray 对集合本身排序
//读取前面写入磁盘的文件,用文件内容来初始化NSMutableArray集合
NSMutableArray* array=[NSMutableArray
arrayWithObjects:
@"武松",
@"孙悟空",
@"白素贞",@"许仙",@"法海",@"小青",
@"武大",nil];
[array addObject:@"路灯"];//相机和最后添加一个元素
NSLog(@"最后追加一个元素后:%@",NSCollectionToString(array));
//使用NSArray向集合尾部添加多个元素
[array addObjectsFromArray:[NSArray
arrayWithObjects:@"张飞",@"关羽"]];
NSLog(@"最后追加两个元素后:%@",NSCollectionToString(array));
//指定位置插入
[array insertObject:@"夜空" atIndex:2];
//使用NSArray向集合指定位置插入多个元素
[array insertObjects:
[NSArray arrayWithObjects:
@"林冲",@"韩信", nil]atIndexes:[NSIndexSet
indexSetWithIndexesInRange:NSMakeRange(3, 2)] ];
[array removeLastObject];//删除集合最后一个元素
[array removeObjectAtIndex:5];
[array removeObjectsInRange:NSMakeRange(2, 3)];
[array replaceObjectAtIndex:2 withObject:@"星月"];
7.5.7 NSArray的KVC和KVO
允许直接对集合中所有元素进行编码 方法:
1.setValueforKey: 将NSArray集合中所有元素的指定key对应属性或实例变量设置为value
2.valueForKey:返回该NSArray集合中所有元素的指定key组成NSArray对象
KVO:
addObserver:forKeyPath:options:context: 为集合中的所有元素添加KVO监听器
removeObserver:forKeyPath: 所有元素 删除
addOBserver:toObjectsAtIndexes:forKeyPath:options:context: 指定所以处添加
removeObserver:fromObjectsAtIndexes:forKeyOath: 指定 删除
//定义一个函数,该函数用于吧NSArray集合转换为字符串
NSString* NSCollectionToString(NSArray* array){
NSMutableString* result=[NSMutableString stringWithString:
@"["];
for (id obj in array) {
[result appendString:[obj description]];
[result appendString:@","];
}
NSUInteger len=[result length];//获取字符串长度
//去掉字符串最后的两个字符
[result deleteCharactersInRange:NSMakeRange(len-1, 1)];
[result appendString:@"]"];
return result;
}
NSArray* array=[NSArray arrayWithObjects:
[[FKUser alloc]initWithName:@"123" pass:@"321" ],[[FKUser alloc] initWithName:@"345" pass:@"543"],
[[FKUser alloc] initWithName:@"567" pass:@"675"]
,nil];
//获取所有几何元素的name属性组成新集合
id newArr=[array valueForKey:@"name"];//获取所有key为name的value
[array setValue:@"这是新名字" forKey:@"name"];//将所有的name的value设置为 这是新名字