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

方法:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容