Objective-C 數組與可變數組

 

 

 

知識點數組

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方法,打印出一句話

相關文章
相關標籤/搜索