OC學習篇之---Foundation框架中的NSArray類和NSMutableArray類
在之前的一篇文章中介紹了Foundation框架中的NSString類和NSMutableString類:
今天我們繼續來看一下Foundation框架中的NSArray類和NSMutableArray類,其實NSArray類和Java中的List差不多,算是一種資料結構,當然我們從這兩個類可以看到,NSArray類是不可變的,NSMutableArray類是可變的。下面就先來看一下NSArray類
一、NSArray類
下面來看一下他的操作方法:// // main.m // 16_NSArray // // Created by jiangwei on 14-10-12. // Copyright (c) 2014年 jiangwei. All rights reserved. // #import <Foundation/Foundation.h> //NSArray中不可以存放基本資料型別,只能存放類的例項,如果需要將基本型別、結構體放入到陣列中得話, //需要通過NSNumber/NSValue進行資料的封裝,同時不能在NSArray中儲存nil int main(int argc, const char * argv[]) { @autoreleasepool { //1.---------------------陣列的建立 NSString *s1 = @"zhangsan"; NSString *s2 = @"lisi"; NSString *s3 = @"wangwu"; //最後的nil相當於結束的標記 NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil]; //列印的時候會呼叫description方法 //相當於:array1.description NSLog(@"%@",array1); //使用類方法建立 array1 = [NSArray arrayWithObjects:s1,s2,s3, nil]; //建立一個數組,將源陣列中的資料拿出來放進去 NSArray *array2 = [NSArray arrayWithArray:array1]; //2.----------------------objectAtIndex //訪問陣列中的資料,陣列中存放的是物件的指標 NSString *str1 = [array1 objectAtIndex:0]; //3.----------------------count //獲取陣列元素中的個數 NSUInteger count = [array1 count];//返回的是一個無符號數值 //4.----------------------containsObject //判斷陣列中是否包含某一個物件,判斷的是指標物件值,不是物件中的值 BOOL isContains = [array1 containsObject:@"zhangsan"]; //5.----------------------indexOfObject //返回一個物件在陣列中的下標值 NSUInteger index = [array1 indexOfObject:@"zhangsan"]; if(index == NSNotFound){ //沒有找到 }else{ //找到了 } //6.----------------------componentsJoinedByString //陣列中存放的如果是字串的話,可以使用連線符將其所有的元素進行連線 //注意陣列中的元素必須都是字串 NSString *content = [array1 componentsJoinedByString:@","]; //7.----------------------lastObject //訪問陣列最後一個元素 NSString *lastObj = [array1 lastObject]; //8.----------------------arrayByAddingObject //在原來的陣列後面追加元素,返回一個新的陣列物件,因為他是不可變的 NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"]; //陣列的遍歷 for(int i=0;i<array1.count;i++){ NSString *str = [array1 objectAtIndex:i]; NSLog(@"%@",str); } //快速遍歷 for(NSString *s in array1){ NSLog(@"%@",s); } //xcode4.4以後,編譯器對陣列的建立和訪問語法做了優化 NSArray *array7 = @[s1,s2,s3]; NSString *s = array7[0]; } return 0; }
1、NSArray的建立
//1.---------------------陣列的建立
NSString *s1 = @"zhangsan";
NSString *s2 = @"lisi";
NSString *s3 = @"wangwu";
//最後的nil相當於結束的標記
NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil];
//列印的時候會呼叫description方法
//相當於:array1.description
NSLog(@"%@",array1);
我們看到他的initWithObjects方法的最後一個值為nil,這個我們在之前說到過這個值,他是空指標的意思,和Java中的null一樣的,這裡為什麼在建立NSArray的時候最後一個值為空呢?這個和C語言中的場景是類似的,C語言中字串的結束符為'/0',那麼這裡的NSArray的最後一個元素為nil,原因是標記NSArray結束了。然後我們呼叫NSLog方法列印NSArray物件,結果:
我們看到了,會打印出非常格式化的資料出來,這個原因是因為NSLog列印物件的時候會呼叫其description方法,和Java中的toString方法一樣,當然我們可以重寫這個方法的,後面會說到。
我們還可以使用類方法建立NSArray:
//使用類方法建立
array1 = [NSArray arrayWithObjects:s1,s2,s3, nil];
//建立一個數組,將源陣列中的資料拿出來放進去
NSArray *array2 = [NSArray arrayWithArray:array1];
2、使用下標訪問元素
3、獲取陣列的大小//2.----------------------objectAtIndex //訪問陣列中的資料,陣列中存放的是物件的指標 NSString *str1 = [array1 objectAtIndex:0];
//3.----------------------count
//獲取陣列元素中的個數
NSUInteger count = [array1 count];//返回的是一個無符號數值
NSUInteger是無符號的int型別4、是否包含某一個元素
//4.----------------------containsObject
//判斷陣列中是否包含某一個物件,判斷的是指標物件值,不是物件中的值
BOOL isContains = [array1 containsObject:@"zhangsan"];
5、找到一個元素在陣列中的下標//5.----------------------indexOfObject
//返回一個物件在陣列中的下標值
NSUInteger index = [array1 indexOfObject:@"zhangsan"];
if(index == NSNotFound){
//沒有找到
}else{
//找到了
}
這裡我們看到用到了一個系統常量:NSNotFound,我們可以看到他的定義:#define NSIntegerMax LONG_MAX
看到了,是一個Long型別的最大值。6、使用指定的連線符連線陣列中所有的元素
//6.----------------------componentsJoinedByString
//陣列中存放的如果是字串的話,可以使用連線符將其所有的元素進行連線
//注意陣列中的元素必須都是字串
NSString *content = [array1 componentsJoinedByString:@","];
7、在陣列的尾部增加一個元素//8.----------------------arrayByAddingObject
//在原來的陣列後面追加元素,返回一個新的陣列物件,因為他是不可變的
NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"];
因為NSArray是不可變的,所以會產生一個新的NSArray物件,返回回來8、陣列的遍歷
//陣列的遍歷
for(int i=0;i<array1.count;i++){
NSString *str = [array1 objectAtIndex:i];
NSLog(@"%@",str);
}
//快速遍歷
for(NSString *s in array1){
NSLog(@"%@",s);
}
第二種方式和Java中的快速遍歷是一樣的。9、Xcode4.4之後新增了NSArray快速建立的一種方式
//xcode4.4以後,編譯器對陣列的建立和訪問語法做了優化
NSArray *array7 = @[s1,s2,s3];
NSString *s = array7[0];
這種方式比之前的建立方式又快又方便,而且符合正常的建立方式,訪問的時候也是可以直接用下標進行獲取元素二、NSMutableArray類
NSArray類是不可變的,NSMutableArray類是可變的,可變類一樣的特性,就是可以進行增刪改查操作
//
// main.m
// 17_NSMutableArray
//
// Created by jiangwei on 14-10-12.
// Copyright (c) 2014年 jiangwei. All rights reserved.
//
#import <Foundation/Foundation.h>
//NSMutableArray繼承NSArray類,有NSArray中的所有方法
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1.---------------------建立可變陣列
NSString *str1 = @"zhangsan";
NSString *str2 = @"lisi";
NSString *str3 = @"wangwu";
NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil];
//下面的這種方式建立的陣列是錯誤的
//下面的這種方式是建立不可變陣列的方式,不能喲關於可變陣列的建立
//NSMutableArray *array1 = @[str1,str2,str3];
//先開闢5個空間,用於儲存元素,當儲存的元素超過了5個,陣列會自動增大空間
NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];
//使用類方法建立
NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5];
//2.---------------------addObject
//新增元素的方法
[mArray1 addObject:str1];
[mArray1 addObject:str2];
//新增陣列,把mArray1中的所有元素全部新增到mArray2中
[mArray2 addObjectsFromArray:mArray1];
NSLog(@"mArray3 = %@",mArray2);
//二維陣列
//這個是將mArray1新增到mArray2陣列中,這樣mArray2就變成了二維陣列了
[mArray2 addObject:mArray1];
//3.---------------------insertObject
//在指定的位置上插入特定元素
[mArray2 insertObject:@"def" atIndex:0];
//4.---------------------replaceObjectAdIdex
//替換元素
[mArray2 replaceObjectAtIndex:0 withObject:@"aaa"];
//5.---------------------exchangeObjectAtIndex
//互換兩個元素的位置
[mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];
//6.---------------------removeObjectAdIndex
//刪除指定位置的元素
[mArray2 removeObjectAtIndex:0];
//刪除最後一個元素
[mArray2 removeLastObject];
//刪除指定的物件
[mArray2 removeObject:@"lisi"];
//刪除所有的物件/清空列表
[mArray2 removeAllObjects];
}
return 0;
}
1、建立方法
//1.---------------------建立可變陣列
NSString *str1 = @"zhangsan";
NSString *str2 = @"lisi";
NSString *str3 = @"wangwu";
NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil];
//下面的這種方式建立的陣列是錯誤的
//下面的這種方式是建立不可變陣列的方式,不能用於可變陣列的建立
//NSMutableArray *array1 = @[str1,str2,str3];
//先開闢5個空間,用於儲存元素,當儲存的元素超過了5個,陣列會自動增大空間
NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];
//使用類方法建立
NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5];
建立方式和NSArray類似,但是有一種方式不能用,就是直接建立的方式,那個只能用於建立不變陣列。但是可變陣列還有一個方法就是能夠事先的設定陣列的大小,而且超過這個大小之後,陣列會自動擴充,類似於C語言中的動態陣列的實現。
2、新增元素
//2.---------------------addObject
//新增元素的方法
[mArray1 addObject:str1];
[mArray1 addObject:str2];
//新增陣列,把mArray1中的所有元素全部新增到mArray2中
[mArray2 addObjectsFromArray:mArray1];
NSLog(@"mArray3 = %@",mArray2);
//二維陣列
//這個是將mArray1新增到mArray2陣列中,這樣mArray2就變成了二維陣列了
[mArray2 addObject:mArray1];
NSLog(@"mArray3 = %@",mArray2);
使用addObjectsFromArray方法是將一個數組中的每個元素新增到指定的陣列中使用addObject方法是講一個數組整個都新增到指定的陣列中了,那麼這個陣列就變成二維陣列了
這個兩個方法要區分一下~~
下面是執行結果:
3、在陣列的指定位置上插入元素//3.---------------------insertObject
//在指定的位置上插入特定元素
[mArray2 insertObject:@"def" atIndex:0];
4、替換元素//4.---------------------replaceObjectAdIdex
//替換元素
[mArray2 replaceObjectAtIndex:0 withObject:@"aaa"];
5、互換兩個元素的位置
//5.---------------------exchangeObjectAtIndex
//互換兩個元素的位置
[mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];
6、刪除方法
//6.---------------------removeObjectAdIndex
//刪除指定位置的元素
[mArray2 removeObjectAtIndex:0];
//刪除最後一個元素
[mArray2 removeLastObject];
//刪除指定的物件
[mArray2 removeObject:@"lisi"];
//刪除所有的物件/清空列表
[mArray2 removeAllObjects];
總結
這篇文章就介紹了Foundation框架中的NSArray類和NSMutableArray類,他們是用來存放一些指定型別的元素的
注:OC中沒有泛型的概念,所以對於陣列中存放了不同型別的值,在執行的時候會報錯的,這個和Java相比,操作集合類的時候安全性就差了點。所以我們在操作集合類的時候需要注意的地方。
相關推薦
OC學習篇之---Foundation框架中的NSArray類和NSMutableArray類
在之前的一篇文章中介紹了Foundation框架中的NSString類和NSMutableString類:今天我們繼續來看一下Foundation框架中的NSArray類和NSMutableArray類,其實NSArray類和Java中的List差不多,算是一種資料結構,當然
OC學習篇之--- property和 synthesize的使用
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---謂詞 NSPredicate
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---類的三大特性 封裝,繼承,多型
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---檔案的操作
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---協議的概念和用法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---類的初始化方法和點語法的使用
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---通知 NSNotificationCenter
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---歸檔和解擋
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
OC學習篇之---KVC和KVO操作
一、KVC操作OC中的KVC操作就和Java中使用反射機制去訪問類的private許可權的變數,很暴力的,這樣做就會破壞類的封裝性,本來類中的的private許可權就是不希望外界去訪問的,但是我們這樣去操作,就會反其道而行,但是我們有時候真的需要去這樣做,哎。所以說有些事不是
OC學習篇之---類的三大特性(封裝,繼承,多型)
之前的一片文章介紹了OC中類的初始化方法和點語法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天來繼續學習OC中的類的三大特性,我們在學習Java的時候都知道,類有三大特性:繼承,封
OC學習13——Foundation框架中的集合
str 集合類 結構 pan sar set 體系 隊列 數組 OC集合類是一些非常有用的工具類,它可以用於存儲多個數量不等的對象,並可以實現常用的數據結構(棧、隊列等),此外,OC集合還可用於保存具有映射關系的關聯數組。OC的集合大致可以分為:NSArray、NSSe
大資料技術學習筆記之hive框架基礎2-hive中常用DML和UDF和連線介面使用
一、分割槽表的介紹及使用 -》需求:統計每一天的PV,UV,每一天分析前一天的資料 -》第一種情況:每天的日誌儲存在同一個目錄中 &nbs
JavaWeb學習篇之----Tomcat中配置數字證書以及網路傳輸資料中的密碼學知識
今天是學習JavaWeb的第二天,我們來了解什麼呢?就瞭解一下Tomcat中配置數字證書的相關內容,但是在說這部分內容的時候,我們貌似得先說一下數字證書的相關概念,那說到數字證書的時候我們還得了解一些
大資料學習筆記——Java篇之集合框架(ArrayList)
Java集合框架學習筆記 1. Java集合框架中各介面或子類的繼承以及實現關係圖: 2. 陣列和集合類的區別整理: 陣列: 1. 長度是固定的 2. 既可以存放基本資料型別又可以存放引用資料型別 3. 存放進陣列的必須是相同型別的資料 VS 集合類: 1. 長度是可變的 2. 只能存放物件的
OC學習小結之ios運行過程詳解
for cat 用戶 with res nbsp c學習 launch cati 1)ios核心類 UIView 視圖,屏幕上能看得見的東西都是視圖,例如:按鈕、文本標簽、和表格等 UIViewController:內部默認有個視圖(UIView),負責管理UIView的
【深度學習篇】--神經網絡中的調優
flow 初始 clas 根據 叠代 pan 容易 組合 語音 一、前述 調優對於模型訓練速度,準確率方面至關重要,所以本文對神經網絡中的調優做一個總結。 二、神經網絡超參數調優 1、適當調整隱藏層數對於許多問題,你可以開始只用一個隱藏層,就可以獲得不錯的結果,比如對於復雜
Django學習篇(web框架的由來)
httpd return 出現 acc IT outer AI pytho 定義 Python的WEB框架有 Django、Tornado、Flask 等多種 ,Django相較與其他WEB框架其優勢為: 大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Sessio
Python+Appium學習篇之WebView處理
tomat sha view源碼 cti contexts and not code acc 1.認識WebView 實例說明: 當你打開百度閱讀APP→VIP全站去廣告→用自帶的 UI Automator去定位裏面的元素,如圖: 不管你去定位 ‘規則詳情‘ ‘開通‘
Python爬蟲從入門到放棄 之 Scrapy框架中Download Middleware用法
sta 頻繁 space raw 處理 們的 img ear 法則 這篇文章中寫了常用的下載中間件的用法和例子。Downloader Middleware處理的過程主要在調度器發送requests請求的時候以及網頁將response結果返回給spiders的時候,所以從