數(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ù)組的最后追加一個元素,原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è)置為 這是新名字

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竹观,一起剝皮案震驚了整個濱河市镐捧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌栈幸,老刑警劉巖帮辟,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芍锚,居然都是意外死亡蔓榄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門逃魄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伍俘,“玉大人勉躺,你說我怎么就攤上這事《Γ” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵咬荷,是天一觀的道長萍丐。 經(jīng)常有香客問我放典,道長基茵,這世上最難降的妖魔是什么壳影? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任宴咧,我火速辦了婚禮,結(jié)果婚禮上掺栅,老公的妹妹穿的比我還像新娘。我一直安慰自己桃笙,他們只是感情好沙绝,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布闪檬。 她就那樣靜靜地躺著,像睡著了一般粗悯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邮丰,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天剪廉,我揣著相機(jī)與錄音炕檩,去河邊找鬼。 笑死笛质,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的跷究。 我是一名探鬼主播敲霍,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼解寝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起聋伦,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤觉增,失蹤者是張志新(化名)和其女友劉穎翻斟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杨赤,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疾牲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年衙解,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚓峦。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡暑椰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出一汽,到底是詐尸還是另有隱情,我是刑警寧澤岩喷,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布纱意,位于F島的核電站鲸阔,受9級特大地震影響迄委,放射性物質(zhì)發(fā)生泄漏腾它。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一曲梗、第九天 我趴在偏房一處隱蔽的房頂上張望妓忍。 院中可真熱鬧,春花似錦定罢、人聲如沸旁瘫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稠屠。三九已至翎苫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攘蔽,已是汗流浹背呐粘。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留漫雷,地道東北人鳍咱。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像蓄坏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涡戳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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