數組(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閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容