數(shù)組(NSArray)和可變數(shù)組(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范圍內(nèi),元素的位置

array=[array arrayByAddingObject:@"suwukong"];//想數(shù)組的最后追加一個(gè)元素,原NSArray本身并沒有改變,只是蔣欣返回的NSArray賦給array

array=[array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"13",@"132", nil]];//向array數(shù)組的最后追加另一個(gè)數(shù)組的所有元素

NSIndexSet集合與NSSet集合的功能基本相似,區(qū)別只是NSIndexSet集合主要用于保存索引值,因此,他的集合元素都是NSUInteger對(duì)象。

NSNotFound 9223372036854775807

NSArraay 怎么判斷哪集合是否包含指定元素呢?

只有某個(gè)集合元素與被查找元素通過isEqual:方法比較返回YES,并不需要兩個(gè)元素是同一個(gè)元素

enumerateObjectsUsingBlock遍歷

enumerateObjectsWithOptions:UsingBlock:遍歷集合中的所有元素,并以此使用元素來執(zhí)行指定的代碼塊,可傳入額外參數(shù),控制遍歷選項(xiàng),如反向遍歷

enumerateObjectsAtIndexes:options:usingBlock: 遍歷集合中指定范圍元素,并以此使用元素來執(zhí)行指定的代碼塊,控制遍歷選項(xiàng),如反向遍歷

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個(gè)元素:%@",idx,obj);

[obj work];

}];

7.5.3 對(duì)NSArray進(jìn)行排序

NSArray提供了大量以sort開頭的排序方法

常用:

1。sortedArrayUsingFunction:context:; 必須返回NSOrderedDescending,NSOrderedAscending、NSOrderedSame這些枚舉值,用于代表集合元素的大小,返回一個(gè)排好序的心NSArray對(duì)象 NSString 自帶的compare:方法,根據(jù)字符對(duì)應(yīng)的編碼

2.sortedArrayUsingSelector:該方法使用集合元素自身的方法堆積和元素排序同樣必須返回NSOrderedDescending,NSOrderedAscending、NSOrderedSame這些枚舉值,用于代表集合元素的大小,返回一個(gè)排好序的心NSArray對(duì)象

3.sortedArrayUsingComparator:該方法使用代碼塊對(duì)必須返回NSOrderedDescending,NSOrderedAscending、NSOrderedSame這些枚舉值,用于代表集合元素的大小,返回一個(gè)排好序的心NSArray對(duì)象 為第一個(gè)的簡化版

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;下一個(gè) 知道該方法返回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 自動(dòng)得帶訪問每個(gè)元素

}

for (id obj in array2) {

NSLog(@"%@",obj);

}

}

7.5.6 ?可變數(shù)組(NSMutableArray)

NSArray 只是保存對(duì)象的指針,因此,NSArray 只保證這些指著那邊兩種的地址不能改變,但指針變量所指向的對(duì)象是可以改變的。

添加 -add

刪除 -remove

替換 -replace

排序 -sort

排序與NSArray不通的是 NSMutableArray 對(duì)集合本身排序

//讀取前面寫入磁盤的文件,用文件內(nèi)容來初始化NSMutableArray集合

NSMutableArray* array=[NSMutableArray

arrayWithObjects:

@"武松",

@"孫悟空",

@"白素貞",@"許仙",@"法海",@"小青",

@"武大",nil];

[array addObject:@"路燈"];//相機(jī)和最后添加一個(gè)元素

NSLog(@"最后追加一個(gè)元素后:%@",NSCollectionToString(array));

//使用NSArray向集合尾部添加多個(gè)元素

[array addObjectsFromArray:[NSArray

arrayWithObjects:@"張飛",@"關(guān)羽"]];

NSLog(@"最后追加兩個(gè)元素后:%@",NSCollectionToString(array));

//指定位置插入

[array insertObject:@"夜空" atIndex:2];

//使用NSArray向集合指定位置插入多個(gè)元素

[array insertObjects:

[NSArray arrayWithObjects:

@"林沖",@"韓信", nil]atIndexes:[NSIndexSet

indexSetWithIndexesInRange:NSMakeRange(3, 2)] ];

[array removeLastObject];//刪除集合最后一個(gè)元素

[array removeObjectAtIndex:5];

[array removeObjectsInRange:NSMakeRange(2, 3)];

[array replaceObjectAtIndex:2 withObject:@"星月"];

7.5.7 NSArray的KVC和KVO

允許直接對(duì)集合中所有元素進(jìn)行編碼 方法:

1.setValueforKey: 將NSArray集合中所有元素的指定key對(duì)應(yīng)屬性或?qū)嵗兞吭O(shè)置為value

2.valueForKey:返回該NSArray集合中所有元素的指定key組成NSArray對(duì)象

KVO:

addObserver:forKeyPath:options:context: 為集合中的所有元素添加KVO監(jiān)聽器

removeObserver:forKeyPath: ?所有元素 刪除

addOBserver:toObjectsAtIndexes:forKeyPath:options:context: 指定所以處添加

removeObserver:fromObjectsAtIndexes:forKeyOath: 指定 刪除

//定義一個(gè)函數(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];//獲取字符串長度

//去掉字符串最后的兩個(gè)字符

[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è)置為 這是新名字

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,415評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,647評(píng)論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評(píng)論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,366評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,887評(píng)論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,737評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,939評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,174評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評(píng)論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,608評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,914評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容