方法:
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范圍內(nèi)构哺,元素的位置
array=[array arrayByAddingObject:@"suwukong"];//想數(shù)組的最后追加一個元素,原NSArray本身并沒有改變绰疤,只是蔣欣返回的NSArray賦給array
array=[array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"13",@"132", nil]];//向array數(shù)組的最后追加另一個數(shù)組的所有元素
NSIndexSet集合與NSSet集合的功能基本相似泞边,區(qū)別只是NSIndexSet集合主要用于保存索引值,因此筒主,他的集合元素都是NSUInteger對象燥翅。
NSNotFound 9223372036854775807
NSArraay 怎么判斷哪集合是否包含指定元素呢骑篙?
只有某個集合元素與被查找元素通過isEqual:方法比較返回YES,并不需要兩個元素是同一個元素
enumerateObjectsUsingBlock遍歷
enumerateObjectsWithOptions:UsingBlock:遍歷集合中的所有元素森书,并以此使用元素來執(zhí)行指定的代碼塊靶端,可傳入額外參數(shù),控制遍歷選項凛膏,如反向遍歷
enumerateObjectsAtIndexes:options:usingBlock: 遍歷集合中指定范圍元素躲查,并以此使用元素來執(zhí)行指定的代碼塊,控制遍歷選項译柏,如反向遍歷
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講義";
//迭代集合內(nèi)指定范圍內(nèi)的元素镣煮,病史鈣元素執(zhí)行代碼塊
[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進(jìn)行排序
NSArray提供了大量以sort開頭的排序方法
常用:
1。sortedArrayUsingFunction:context:; 必須返回NSOrderedDescending,NSOrderedAscending鄙麦、NSOrderedSame這些枚舉值典唇,用于代表集合元素的大小,返回一個排好序的心NSArray對象 NSString 自帶的compare:方法胯府,根據(jù)字符對應(yīng)的編碼
2.sortedArrayUsingSelector:該方法使用集合元素自身的方法堆積和元素排序同樣必須返回NSOrderedDescending,NSOrderedAscending介衔、NSOrderedSame這些枚舉值,用于代表集合元素的大小骂因,返回一個排好序的心NSArray對象
3.sortedArrayUsingComparator:該方法使用代碼塊對必須返回NSOrderedDescending,NSOrderedAscending炎咖、NSOrderedSame這些枚舉值,用于代表集合元素的大小寒波,返回一個排好序的心NSArray對象 為第一個的簡化版
1 自然排序 ? 2和3 可自定義比較規(guī)則 稱為定制排序
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 結(jié)束循環(huán)
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 ?可變數(shù)組(NSMutableArray)
NSArray 只是保存對象的指針乘盼,因此,NSArray 只保證這些指著那邊兩種的地址不能改變绸栅,但指針變量所指向的對象是可以改變的页屠。
添加 -add
刪除 -remove
替換 -replace
排序 -sort
排序與NSArray不通的是 NSMutableArray 對集合本身排序
//讀取前面寫入磁盤的文件蓖柔,用文件內(nèi)容來初始化NSMutableArray集合
NSMutableArray* array=[NSMutableArray
arrayWithObjects:
@"武松",
@"孫悟空",
@"白素貞",@"許仙",@"法海",@"小青",
@"武大",nil];
[array addObject:@"路燈"];//相機(jī)和最后添加一個元素
NSLog(@"最后追加一個元素后:%@",NSCollectionToString(array));
//使用NSArray向集合尾部添加多個元素
[array addObjectsFromArray:[NSArray
arrayWithObjects:@"張飛",@"關(guān)羽"]];
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
允許直接對集合中所有元素進(jìn)行編碼 方法:
1.setValueforKey: 將NSArray集合中所有元素的指定key對應(yīng)屬性或?qū)嵗兞吭O(shè)置為value
2.valueForKey:返回該NSArray集合中所有元素的指定key組成NSArray對象
KVO:
addObserver:forKeyPath:options:context: 為集合中的所有元素添加KVO監(jiān)聽器
removeObserver:forKeyPath: ?所有元素 刪除
addOBserver:toObjectsAtIndexes:forKeyPath:options:context: 指定所以處添加
removeObserver:fromObjectsAtIndexes:forKeyOath: 指定 刪除
//定義一個函數(shù)况鸣,該函數(shù)用于吧NSArray集合轉(zhuǎn)換為字符串
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設(shè)置為 這是新名字