Objective-C 數組與可變數組


 

 

 

知識點

1.NSArray 類的重點函數使用

2.NSMutableArray 類的重點函數使用 3.字符串的分割和拼接

============================

 

NSArray,    NSMutableArray

 

1.【需要理解的知識】

1.1 C語言中數組

 

1、 相同數據類型的集合; 

 

int a[10];

float b[20];

char c[30];

 

2、 數組地址是連續; 

 

 

1、OC數組和c數組的區別

1、NSArray是個類 數組是對象; 存儲也是對象; 

2、數組不能直接存儲基本數據類型: char, int, shot, long….. 

3、 數組分為兩種: 可變數組, 不可變數組;      NSArray不可變數組類, NSMutableArray是可變數組類; 

 

 

區別:

 

C數組里面存儲基本數據類型; 

OC數組里面存儲的是對象; 

 

 

     

 

2.【需要記住的知識】

 

不可變數組的類名: NSArray

 

 

 

2、如何創建一個數組

2.1、

 

 

通過對象來創建:

        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.2、Objective-c 2.0 新特征

 

 

從Xcode4.6以后,允許用類似c數組方式創建數組,僅適用於不可變數組

 

@[對象1, 對象2, 對象3.....];

 

        NSArray *arr5 = @[@"string1", @"string2", @"string3"];

 

 

    2.4、創建一個空對象   

 

        NSNull *nilObject = [NSNull null];

 

 

==========================================================

 

3.數組的元素是什么

  1)數組元素可以是任意對象

 

 

 

練習:1.用三種方式創建一個包含3個字符串對象的數組

 

 

 

===========================

 

NSArray常用方法

1、獲取數組元素個數

 

NSUInteger count = [array count];

 

 

2、通過索引號獲取相應的元素(2種)   (重要)       NSString *s = [array objectAtIndex:0];

        NSString *s1 = array[1];

 

 

3、取出最后一個元素

 

  NSLog(@"%@",[array lastObject]);

 

 

 

     4、通過對象獲取在數組中的下標

 

        NSLog(@"%li",[array indexOfObject:@"string1"]);

 

 

5、判斷數組中數組包含元素anObject

 

        BOOL ret = [array containsObject:@"string4"];

 

 

===================================

 

5、如何取出數組中的一部分元素   sub****

  1)subarrayWithRange消息

    作用:取出數組中指定范圍內range的元素

        

//6-1、 根據范圍獲取子數組(一部分數組元素);

        NSRange range = NSMakeRange(1, 3);

        NSArray *subArray = [array subarrayWithRange:range];

        NSLog(@"%@", subArray);

 

 

  2)objectsAtIndexes消息

    作用:從數組中獲取指定下標的元素

 

//6-2、根據下標來獲取子數組:

        // 整數集合對象;

        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語言中遍歷一個數組的所有元素

 

1、通過下標遍歷數組

 

for (NSInteger i = 0; i < [arr count]; i++) {

            NSLog(@"%@", arr[i]);

        }

 

2、NSEnumerator  枚舉器

  1)objectEnumerator消息

    作用:正序輸出所有元素

        NSEnumerator *enumertor = [arr objectEnumerator];

 

  2)reverseObjectEnumerator消息

    作用:逆序輸出所有元素

 

  NSEnumerator *revertor = [arr reverseObjectEnumerator];

 

 

 

3、快速枚舉法

  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   (增刪改)

 

1、增加數組元素

添加元素

 

        [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];

        // 對象個數 和 整數個數要一致相等; 

 

 

2、如何刪除元素        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(); // 產生隨機數;

 

 

 

5、交換數組內的兩個元素: exchangeObjectAtIndex: withObjectAtIndex 

        [arrM exchangeObjectAtIndex:0 withObjectAtIndex:2];

 

 

  

練習:

1.將數組內的元素逆序保存

 

@[@“1”, @“2”, @“3”, @“4”, @“5”]

 

@[@“5”,@“4”,@“3”,@“2”,@“1”];

 

 

 

 

6、替換元素

  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對象

 

 

 

 

 =============================

 

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM