標籤:nsarray nsmutablearray
**OC中的NSArray和NSmutableString
本文將介紹在oc中關於集合(NSArry,也可稱之為數組)和可變字串(NSmutableString)的一些內容:
- 關於NSmutableString
- 關於NSArray
- NSArray的建立
- NSArray添加資料
- NSArray擷取某個資料
- NSArray移除資料
- NSArray資料遍曆
- NSArray資料排序
- 關於NSArray其他動作方法
關於NSmutableString
- 其實NSmutableString和NSString都是表示一個字串,NSString字串初始化以後是不能改變的,而NSmutableString定義的字串可以更改。其方法和NSString基本操作差不多一樣。
-如appendString表示追加字串;
-substringFromIndex截取字串;
-componentsSeparatedByString分割字串;
-characterAtIndex根據下表取值;
-stringByAppendingPathExtension追加一個拓展名;
-stringByDeletingPathExtension刪除一個拓展名;
-hasPrefix,hasSuffix判斷前尾碼;
等等一些方法…
關於NSArray
- 關於OC中的NSArray可以理解成數組,也可以理解成是集合,用來裝一個類型資料的合集,在java中我們通常把數組和集合(List..)區分開來,其實OC中的NSArray和java中的list很像。有java基礎的開發人員應該很容易能夠懂。
NSArray的建立
- arrayWithObjects方法
- initWithContentsOfFile方法,從檔案中擷取資料
注意:
集合中如果資料是某一自訂對象,這些對象不用自己釋放,當數組銷毀時會一一釋放對象,由於初始化資料的時候arrayWithO ject是靜態方法所以它的釋放不用我們管理,系統幫我們管理。
說明:
initWithContentsOfFile方法是從某個檔案中擷取資料,放到數組中,這個的檔案資料並不是什麼資料都可以,要具有一定的格式-xml格式資料,如:
,所以一般檔案格式為.xml格式的檔案。
NSArray添加資料
- arrayByAddingObject能夠添加一個資料到數組
注意:
使用這個方法添加資料得到的是 一個新的數組,不是在原來的基礎上添加進去的,因為NSArray初始化完成以後就不能改變了,也可以說NSArray不支援添加操作,這裡可以使用NSMutableArray(是NSArray的子類),這個和NSmutableString特性有點像,是可變的。
NSArray擷取某資料
- objectAtIndex能夠添加一個資料到數組
當然有根據下標擷取資料,那肯定就能根據資料擷取其下標:
這個的stu是一個數組裡面一個對象。
NSArray移除資料
- NSArray沒有移除資料的方法,因為NSArray初始化以後是不能改變的,個NSString一樣,可以使用NSMutableArray,該類中有個方法removeObjectAtIndex:index,移除下標為index的元素。
NSArray資料遍曆
用普通的for迴圈遍曆,優點-事能夠擷取下標
和java中的for一樣的,比較簡單。
用普通的foreach迴圈遍曆,優點-效率相對比較高
這裡的for結構為:for(id data in array){},
id:表示一切對象;
data:表示臨時變數,和java中的一樣;
in:相當於java中的額 “:”,在哪裡迴圈;
array:表示需要遍曆的數組;
使用Block代碼塊來進行遍曆
這方法apple是比較推薦的,效率比較高,容易控制。
enumerateObjecyUsingBlock中有三個參數,
id :當前的對象;
NSUInteger:當前對象的下標;
BOOL:表示是否停止遍曆,如需要停止著*stop=false即可。(參數中的 *stop表示是一個指標,而擷取指標的值就是 *stop,把指標值更改為false,停止遍曆)。
NSArray資料排序
sortedArrayUsingSelector:@selector(compare:)預設升序
說明:@selector表示可以理解為一個篩選器,compare:是系統的方法,調用該方法排序會返回一個已經排好序的新數組。
sortedArrayUsingSelector:@selector(compareStudent:)自訂篩選方法,compareStudent:自己寫的篩選方法,該方法寫在Student對象中,因為array裡面裝的是Student對象資料。
Student中:
說明:在student.h中聲明,傳回值固定為NSComparisonResult
-(compareStudent) compareStudent:(student *)stu
在student.m中實現該方法
-(NSComparisonResult)compareStudent:(student *)stu{ NSComparisonResult result=[self.name compare:stu.name]; //以下可以寫判斷方法。。。。 return result; }
在main中調用該方法:
使用程式碼片段block,sortedArrayUsingComparator:^NSComparisonResult(id*obj1,id *obj2)
其實最終原來還是根據student中的名字來排序的在代碼中可以看到。
自訂篩選器,sortedArrayUsingDescriptors方法
這裡的需求是先根據學生姓名來排序,然後在根據學生擁有的書名排序。
首先我們定義一個根據學生姓名排序的篩選器:
osrtDescriptorWith:表示根據哪個key來為排序標準
ascending:是否升序,yes表示升序,no表示降序
根據書名來建立排序器也一樣的。
關於NSArray其他動作方法
makeObjectsPerformSelector給數組中的每個對象發送一條訊息
其中test方法是student中定義的方法。
可以有參數,也可以沒有參數,但是如果有參數,最多隻能有一個參數傳遞。
writeToFile把數組中的資料寫出到檔案
ffilepath:檔案路徑;
atomically:是否遵守原子性。
containsObject是否包含了某個對象值
componentsJoinedByString把數組拼接成一個字串
方法有一個參數@”-“:表示分割組合成的字串用“-”來分開。
最終列印的結果為:
×××× - ×××× - ×××× - ××××;
Object-C之NSArry,(補充NSmutableString)