美文网首页
数组(NSArray)和可变数组(NSMutableArray)

数组(NSArray)和可变数组(NSMutableArray)

作者: nalis风 | 来源:发表于2016-07-19 11:32 被阅读1157次

方法:

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设置为 这是新名字

相关文章

网友评论

      本文标题:数组(NSArray)和可变数组(NSMutableArray)

      本文链接:https://www.haomeiwen.com/subject/vgumjttx.html