知識點數組
1.NSArray 類的重點函數使用dom
2.NSMutableArray 類的重點函數使用 3.字符串的分割和拼接函數
============================spa
NSArray, NSMutableArray設計
1.【須要理解的知識】code
1.1 C語言中數組component
一、 相同數據類型的集合; 對象
int a[10];排序
float b[20];繼承
char c[30];
二、 數組地址是連續;
一、OC數組和c數組的區別
一、NSArray是個類 數組是對象; 存儲也是對象;
二、數組不能直接存儲基本數據類型: char, int, shot, long…..
三、 數組分爲兩種: 可變數組, 不可變數組; NSArray不可變數組類, NSMutableArray是可變數組類;
區別:
C數組裏面存儲基本數據類型;
OC數組裏面存儲的是對象;
2.【須要記住的知識】
不可變數組的類名: NSArray
二、如何建立一個數組
2.一、
經過對象來建立:
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"string1", @"string2", @"string3", nil];
經過一個數組了建立
NSArray *arr2 = [[NSArray alloc] initWithArray:arr1];
//經過類的方法建立
經過對象來建立:
NSArray *arr3 = [NSArray arrayWithObjects:@"字符串1", @"字符串2", @"字符串3", nil];
經過一個數組了建立
NSArray *arr4 = [NSArray arrayWithArray:arr2];
2.二、Objective-c 2.0 新特徵
從Xcode4.6之後,容許用相似c數組方式建立數組,僅適用於不可變數組
@[對象1, 對象2, 對象3.....];
NSArray *arr5 = @[@"string1", @"string2", @"string3"];
2.四、建立一個空對象
NSNull *nilObject = [NSNull null];
==========================================================
3.數組的元素是什麼
1)數組元素能夠是任意對象
練習:1.用三種方式建立一個包含3個字符串對象的數組
===========================
NSArray經常使用方法
一、獲取數組元素個數
NSUInteger count = [array count];
二、經過索引號獲取相應的元素(2種) (重要) NSString *s = [array objectAtIndex:0];
NSString *s1 = array[1];
三、取出最後一個元素
NSLog(@"%@",[array lastObject]);
四、經過對象獲取在數組中的下標
NSLog(@"%li",[array indexOfObject:@"string1"]);
五、判斷數組中數組包含元素anObject
BOOL ret = [array containsObject:@"string4"];
===================================
五、如何取出數組中的一部分元素 sub****
1)subarrayWithRange消息
做用:取出數組中指定範圍內range的元素
//6-一、 根據範圍獲取子數組(一部分數組元素);
NSRange range = NSMakeRange(1, 3);
NSArray *subArray = [array subarrayWithRange:range];
NSLog(@"%@", subArray);
2)objectsAtIndexes消息
做用:從數組中獲取指定下標的元素
//6-二、根據下標來獲取子數組:
// 整數集合對象;
NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];
[indexSet addIndex:0];
[indexSet addIndex:2];
[indexSet addIndex:4];
NSArray *subArray2 = [array objectsAtIndexes: indexSet];
練習:
1.設計一我的類,方法有speak說話,建立一我的對象p1;
設計一個狗類,方法有bark叫,建立一條狗對象d1;
建立一個數組,存儲一個字符串對象,一我的對象,一條狗對象;
經過循環判斷該數組內的元素的類型,
若是是人,調用方法speak;
若是是狗,調用方法bark;
若是是字符串,直接輸出;
2.建立一個數組,NSArray *arr = @[@「1」,@「2」,@「3」,@「4」,@「5」,@「6」,@「7」,@「8」,@「9」,@「10」];
取出該數組中下標能整除3的元素來組成一個新的數組,而且輸出;
===========================
NSArray數組的遍歷
回憶:如何在c語言中遍歷一個數組的全部元素
一、經過下標遍歷數組
for (NSInteger i = 0; i < [arr count]; i++) {
NSLog(@"%@", arr[i]);
}
二、NSEnumerator 枚舉器
1)objectEnumerator消息
做用:正序輸出全部元素
NSEnumerator *enumertor = [arr objectEnumerator];
2)reverseObjectEnumerator消息
做用:逆序輸出全部元素
NSEnumerator *revertor = [arr reverseObjectEnumerator];
三、快速枚舉法
1)for in 語法
for (NSString *s in arr) { // 把arr數組裏面每個對象一個一個地獲取出來;
NSLog(@"%@", s);
}
練習:1.找出數組中長度最長的字符串
2.找出數組中長度最短的字符串
數組的總結:
1,數組也是一個對象 (NSArray類建立數組對象)
2,不可變數組一旦建立,數組的元素個數和元素內容和元素順序都是不能夠改變的
3,數組中的元素,能夠是任意類型的對象,不單純能夠是字符串,包括數組對象, 人對象, 狗對象。。。。。
4,數組中存放的元素是對象的地址
5,數組能夠用NSLog(%@)來打印,會打印出數組的每一個元素
=====================================
NSMutableArray 和 NSArray (上述講的NSArray的方法,均可以在NSMutableArray對象使用)
NSMutableArray 繼承 NSArray;
1.NSMutableArray的做用 存儲對象; (增刪改)
2.如何建立一個NSMutableArray
1)經過arrayWithCapacity建立
是一個參考容量,數組會根據實際的元素變換長度
2)經過alloc建立
============================
NSMutableArray (增刪改)
一、增長數組元素
添加元素
[arrM addObject:@"lixiaolong"];
從一個數組添加對象
[arrM addObjectsFromArray:@[@"zhangsan", @"lisi", @"laowang"]];
insert****
1)如何插入一個元素
[arrM insertObject:@"zhizhuxia" atIndex:2];
2) 插入多個元素
NSMutableIndexSet *index = [[NSMutableIndexSet alloc] init];//空整數集合對象
[index addIndex:0];
[index addIndex:2];
[index addIndex:3];
[arrM insertObjects:@[@"one", @"two", @"three"] atIndexes:index];
// 對象個數 和 整數個數要一致相等;
二、如何刪除元素 remove*****
1)刪除指定下標的元素
[arrM removeObjectAtIndex:1];
2) 刪除最後一個元素
[arrM removeLastObject];
3)根據指定對象來刪除元素
[arrM removeObject:@"lisi"];
4)在必定範圍刪除指定的元素
[arrM removeObject:@"zhangsan" inRange:NSMakeRange(0, 4)];
5)刪除指定範圍的全部元素:
[arrM removeObjectsInRange:NSMakeRange(3, 2)];
6)根據一個數組刪除指定的元素
[arrM removeObjectsInArray:@[@"1",@"2",@"3", @"one"]];
7)一次性刪除全部指定下標的元素
NSMutableIndexSet *index
[arrM removeObjectsAtIndexes:index];
8)刪除全部元素
[arrM removeAllObjects];
總結:
增: add*****, insert*****
刪: remove*****
練習:
1.建立一個可變數組,數組中包含若干不相同的字符串,要求將指定的字符串刪除
2.建立一個數組,數組中包含若干不相同的字符串,要求將下標整除3 的元素所有刪除
3.先定義一個Person類,包含一個成員變量:no,隨機產生no報數
若是數組中的人的下標能整除報數, 則出列(remove)
arc4random(); // 產生隨機數;
五、交換數組內的兩個元素: exchangeObjectAtIndex: withObjectAtIndex
[arrM exchangeObjectAtIndex:0 withObjectAtIndex:2];
練習:
1.將數組內的元素逆序保存
@[@「1」, @「2」, @「3」, @「4」, @「5」]
@[@「5」,@「4」,@「3」,@「2」,@「1」];
六、替換元素
1)1.替換一個元素replaceObjectAtIndex:withObject:
[arrM replaceObjectAtIndex:0 withObject:@"three"];
2. 替換多個元素 replaceObjectsAtIndexes:withObjects:
[arrM replaceObjectsAtIndexes:index withObjects:@[@"four",@"one"]];
3. setArray:所有修改
[arrM setArray:@[@"fire"]];
總結:
增: add****, insert*****
刪: remove******
改: replace****, exchange**** , set***** (所有改成....)
===========================
字符串的分割與拼接
1.如何分割字符串 "+" 「hello_world+ddd」
1)componentsSeparatedByString消息
做用:將字符串按照指定的字符串進行分割
2)componentsSeparatedByCharactersInSet消息
做用:使用指定的NSCharaterSet集合來分割字符串
注意:若分割條件出如今開頭或者結尾,則會出現空串@""
2.NSCharacterSet集合的使用與NSIndexSet的區別
需求:如今須要將一個字符串按照數字分割
1) NSCharacterSet做用
NSCharacterset是無序字符集合,
主要用來判斷已知字符串是否包含制定字符集,而不能夠用來保存字符串
2)characterSetWithCharactersInString消息
做用:根據指定字符串中的字符構建一個NSCharaterSet集合
3.字符串拼接
1)componentsJoinedByString消息
做用:每一個元素間以指定的字符串進行鏈接
示例:時間,句子…
練習:
將字符串@ 「I am a man」 和 @」You are so good";
組合成@「I You am are a so man good」
===========================
NSNumber的做用
需求:OC的數組沒法放入C語言的基本數據類型
做用:把C語言的基本數據類型轉換成NSNumber對象
=============================
八、NSMutableArray數組排序
1)數組排序方法
//按照ASC碼大小進行排序
//提供一個排序的方法,使數組自動按照排序方法的法則進行排序
NSArray *arr1 = [arr sortedArrayUsingSelector:@selector(compare:)];
============================
做業:
1.根據字符串的長度對數組進行排序 (冒泡升序)(選擇降序)
2:建立一個數組,元素是5個Dog 類的對象地址,遍歷數組,是每一個元素都執行bark函數
bark函數能夠打印出dog 的姓名和年齡
3:建立一個數組,數組中有三個Cat 的對象,有三個Dog 的對象,用三種方式來遍歷數組,若是是Cat 的對象就發送wash 的消息,打印「小貓在洗臉」,若是是Dog 的對象,就給對象發送bark 的消息,打印狗叫聲
4:建立一個Dog的類,重寫類的description方法,打印出一句話