1. 程式人生 > >NSArray NSDictionary NSMutableArray NSMutableDictionary

NSArray NSDictionary NSMutableArray NSMutableDictionary

一、NSArray

NSArray 是不可變的,而且只能儲存Object-c物件。另外,陣列的最後一個元素一定是nil,表示結束。

注:這些集合類只能收集cocoa物件(NSObject物件),如果想儲存一些原始的C資料(例如,int,float,double,BOOL等),則

需要將這些原始的C資料封裝成NSNumber型別的,NSNUmber物件是cocoa物件,可以被儲存在集合類中。

陣列常見的用法首先是建立陣列,然後對陣列進行操作。

對陣列進行的常見操作可以分為:增(插入)、刪、改、查、取、遍歷、排序、比較。

對於NSArray來說,因為本身是不可變的,所以對NSArray的操作沒有增和刪。

1.NSArray的宣告與初始化

NSArray * array =[[NSArray alloc]initWithObjects:@"One",@"Two",@"Three",@"Four",nil];

NSArray * array1 =[NSArray arrayWithObjects:@"One",@"Two",nil];//不需要手動釋放

//- (unsigned) Count;陣列所包含物件個數;

 NSLog(@"%ld",[arraycount]);

//- (id) objectAtIndex: (unsigned int) index;獲取指定索引處的物件;

NSLog(@"%@"

,[arrayobjectAtIndex:2]);

 [array release];

//----從一個數組拷貝資料到另一個數組(可變陣列

 NSMutableArray * MutableArray1 = [[NSMutableArray alloc]init];

 NSArray * array2 =[NSArray  arrayWithObjects:@"a",@"b",@"c",nil];

 MutableArray1 = [NSMutableArray  arrayWithArray:array2];

 NSLog(@"%@",MutableArray1);

//NSArray初始化的時候也可以使用

arrayWithArray

NSArray * array3 = [[NSArrayalloc] init];

array3 =[NSArray arrayWithArray:array1];

NSLog(@"%@",array3);

2.NSArray的遍歷  通常有三種方式  1.in    2.迭代器   3.for  

id obj;

NSMutableArray * newArray =[ [NSMutableArray alloc]init];

NSArray * oldArray =[NSArrayarrayWithObjects:@"a",@"b",@"d",@"c",nil];

for (int i=0; i<[oldArray count]; i++) {

       obj=[[oldArray objectAtIndex:i]copy];

        [newArray addObject:obj];

}

//快速列舉

for (id obj1in oldArray) {

            [newArray addObject:obj1];

 }

3.排序

/*

1.字串陣列排序

IOS提供一個sortedArrayUsingSelector ()函式,用於對字串陣列進行排序,方法會在排序後返回一個新的陣列。

[array  sortedArrayUsingSelector (@selector(xxxx:))];

xxxx:方法需要你自己根據實際情況設定排序方式。有預設的排序方法 compare :

2.數字陣列排序

將數字加入陣列,首先要轉換成NSNumber。然後再使用sortedArrayUsingSelector:

注意取出數字元素的時候要換一下型別

NSNumber *indicator = (NSNumber *)[ numberArray  objectAtIndex:idx];

int  value  = [ indicator intValue ];

3.對物件陣列排序

可以使用NSSortDescriptor對物件陣列進行排序。

@interface  Person :NSObject {

 NSString *firstName;

 NSString *lastName;

}

 @property (nonatomic , retain ) NSString *firstName ;

 @property (nonatomic , retain ) NSString *lastName ;

 現在,有一個由Person物件組成的陣列,對這個陣列排序,使用sortUsingDescriptors:             

NSSortDescriptor *sorter = [ NSSortDescriptor  alloc ] initWithKey : xxx   ascending:YES];                                            

[array   sortUsingDescriptors : [ NSArray  arrayWithObject:sorter ]] ;

*/

 [newArray sortUsingSelector:@selector(compare:)];

 NSLog(@"%@",newArray);

4.切分陣列

//從字串分割到陣列componentsSeparateByString

NSString * string = [[NSStringalloc] initWithString:@"One,Two,Three,Four"];

NSArray * array4 = [stringcomponentsSeparatedByString:@","];

NSLog(@"%@",array4);

[string release];

//從數組合並元素到字串- componentsJoinedByString:

NSArray * array5 =[NSArrayarrayWithObjects:@"One",@"Two",@"Three",@"Four",nil];

NSString * string2 =[array5componentsJoinedByString:@","];

NSLog(@"%@",string2);

二、NSMutableArray(可變陣列)

2.1 初始化NSMutableArray

//給陣列分配容量

NSMutableArray * array6;

array6 = [NSMutableArrayarrayWithCapacity:20];

//在陣列末尾新增物件

array6 =[NSMutableArrayarrayWithObjects:@"One",@"Two",@"Three",nil];

[array6 addObject:@"Four"];

NSLog(@"%@",array6);

2.2刪除陣列中指定索引處物件

[array6 removeObjectAtIndex:1];

NSLog(@"%@",array6);

2.3遍歷陣列

//- (NSEnumerator *)objectEnumerator;從前向後

NSMutableArray * array7 =[NSMutableArrayarrayWithObjects:@"One",@"Two",@"Three",nil];

NSEnumerator * enumerator;

enumerator = [array7 objectEnumerator];

id temp;

while(temp=[enumeratornextObject]){

       NSLog(@"%@",temp);

}

//- (NSEnumerator *)reverseObjectEnumerator;從後向前

NSEnumerator * enumerator1;

enumerator1 =[array7 reverseObjectEnumerator];

while(temp=[enumerator1nextObject]){

      NSLog(@"%@",temp);

}

//快速列舉

for(NSString * string3in array7){

     NSLog(@"%@",string3);

}

三、NSDictionary(不可變詞典)

 [NSDictionary dictionaryWithObjectsAndKeys:..] :使用鍵值對兒直接建立詞典物件,結尾必需使用nil標誌結束。

 [NSDictionary initWithObjectsAndKeys:..] :使用鍵值對兒初始化詞典物件,結尾必需使用nil標誌結束。

 [dictionary count]: 得到詞典的長度單位。

 [dictionary keyEnumerator]: 將詞典的所有KEY儲存在NSEnumerator中,NSEnumerator很像Java語言中的迭代器,使用快速列舉可以遍歷詞典中所有儲存KEY值。

[dictionary  objectEnumerator]: 將詞典的所有value儲存在NSEnumerator,用法和上面差不多可用來遍歷KEY對應儲存的Value值。

         [dictionary objectForKey:key]:通過傳入KEY物件可以拿到當前KEY對應儲存的值。

3.1NSDictionary的宣告與初始化

//- (id) initWithObjectsAndKeys;

NSDictionary * dictionary =[[NSDictionaryalloc]initWithObjectsAndKeys:@"geek",@"name",@"110",@"Tel",@"18",@"age",nil];

//得到字典的數量

NSUInteger count =[dictionarycount];

NSLog(@"字典的數量為:%ld",count);

//得到詞典中所有KEY

NSEnumerator * enumeratorKey = [dictionarykeyEnumerator];

for(NSObject * objectin enumeratorKey){

        NSLog(@"遍歷KEY的值%@",object);

 }

//得到詞典中所有Value

NSEnumerator * enumeratorValue = [dictionaryobjectEnumerator];

for(NSObject * objectin enumeratorValue){

      NSLog(@"遍歷Value的值%@",object);

 }

//通過KEY找到value  

NSString * string3 =[dictionaryobjectForKey:@"name"];

if(string3 !=nil){

    NSLog(@"%@",string3);

}

   NSLog(@"%@",dictionary);

四、NSMutableDictionary(可變詞典)

NSMutableDictionary NSDictionary的子類,所以繼承了NSDictionary的方法。

4.1 NSMutableDictionary 的宣告與初始化

NSMutableDictionary * MutableDictionary = [NSMutableDictionarydictionaryWithCapacity:10];// 建立一個可變詞典初始指定它的長度為10.,動態的新增資料如果超過10這個詞典長度會自動增加,所以不用擔心陣列越界。

//向詞典中動態新增資料

[MutableDictionary setObject:@"Lucy"forKey:@"name"];

[MutableDictionary setObject:@"110"forKey:@"Tel"];

//通過KEY找到value

NSString * string4 =[MutableDictionaryobjectForKey:@"name"];

if(string4 !=nil){

    NSLog(@"%@",string4);

}

//[dictionary removeObjectForKey..] :刪除掉詞典中指定KEY的資料。

NSLog(@"%@",MutableDictionary);

[MutableDictionary removeObjectForKey:@"name"];

 NSLog(@"%@",MutableDictionary);

//[dictionary removeAllObjects..] :刪除掉詞典中的所有資料。

[MutableDictionary removeAllObjects];

NSLog(@"%@",MutableDictionary);

//詞典類的存在就是為了解決在大量資料中查詢方便,因為它是通過key直接找到value所以速度很快,避免一個個的遍歷尋找造成的效率低下,靈活的使用詞典類會幫你的程式提速。

相關推薦

NSArray NSDictionary NSMutableArray NSMutableDictionary

一、NSArray NSArray 是不可變的,而且只能儲存Object-c物件。另外,陣列的最後一個元素一定是nil,表示結束。 注:這些集合類只能收集cocoa物件(NSObject物件),如果想儲存一些原始的C資料(例如,int,float,double,BOOL等)

集合:NSArrayNSMutableArrayNSDictionaryNSMutableDictionary、NSSet、NSMutableSet使用

/*本文介紹了:NSArray(有序的集合,儲存的元素在一個整塊的記憶體中並按序排列)、 NSMutableArray、 NSDictionary(鍵值對映)、 NSMutableDictionary、 NSSet(無序的集

[iOS] NSArrayNSMutableArrayNSMutableDictionary

NSArray:固定長度陣列 使用固定一串資料給NSArray時,必須在陣列最後一個值放入nil,否則會發生錯誤。 範例: NSArray *array = [ [ NSArray alloc ] initWithObjects:@”aa”,@”bbb”,nil];//宣告一陣列放入aa、bb字串 NSL

iOS開發之NSDictionaryNSMutableDictionary

NSDictionary不可變字典 1、[NSDictionary dictionaryWithObjectsAndKeys:..]: 使用鍵值對兒直接建立字典物件,結尾必需使用nil標誌結束。 2、[NSDictionary initWithObjectsAndKeys:..]:

iOS第六課 NSArrayNSMutableArray

NSArray基本概念 什麼是NSArray NSArray是OC中的陣列類,開發中建議儘量使用NSArray替代C語言中的陣列 NSArray有哪些使用注意 只能存放任意OC物件, 並且是有順序的 不能儲存非OC物件, 比如int\float\double\char\enu

iOS NSArrayNSMutableArray原理揭露

在iOS開發中,我們在非常非常多的地方用到了陣列。而關於陣列,有很多需要注意和優化的細節,需要我們潛入到下面,去了解。 閱讀《Effective Objective-C 2.0》的原版的時候,我發現了之前沒怎麼注意到的一段話: In the case of NSArra

[Objective-C]strong、copy在NSArrayNSMutableArray的應用區別

兩個問題 1. 使用strong修飾NSArray會有什麼問題? 2. 使用copy修飾NSMutableArray會有什麼問題? 1. 使用strong修飾NSArray的問題 // // StrongCopyTest.h // StudyRuntim

NSArrayNSMutableArray應該使用copy還是strong?

先說標題的正確答案: @property (nonatomic,copy) NSArray *immutableArray; @property (nonatomic,strong) NSMutableArray *mutableArray; 其他集合: NSAr

NSArrayNSMutableArray的常用方法

/* 初始化方法:     1.init返回一個空陣列      2.initWithArray從已有陣列初始化      3.initWithContentsOfFile//從plist檔案載入      4.initWithContentsOfUrl//從網路地址上獲取

黑馬程式設計師——Foundation框架——NSArrayNSMutableArray

接下來複習的內容是Foundation中使用頻率很高的NSArray和NSMutableArray。 這兩個類和Java中集合的概念相似。 一、NSArray NSArray是一個數組性質的類。並且同樣與Java類似,只能用來存放物件(且只能是OC物件)。不允許有空值出現

oc 知識總結二(NSArrayNSMutableArray

注:1、陣列:是一組有序的物件的集合,通過索引下標獲取到陣列中的各個元素。        2、陣列中不可以存放基本資料型別,只能存放物件。如果需要將劇本資料型別放入陣列中,需要通過NSNumber來放入。 一、不可變陣列(NSArray) 1、建立NSArray (1)方法

OC NSArrayNSMutableArray 常用方法的使用和例項

#import <Foundation/Foundation.h> NSInteger intSort(id num1, id num2, void *context); int main(int argc, const char * argv[]) {

NSArray,NSDictionary,NSSet用法及區別

-NSArray1、初始化、取值等基礎操作          NSArray 是不可變陣列,一旦建立完成就不能夠對陣列進行,新增,刪除等操作  NSArray * array1 = [NSArrayarrayWithObjects:str1,str2,str3,str1,nil];      在建立一個N

NSString/NSArray/NSDictionary/NSSet方法的總結

NSString 建立 NSString *[email protected]”test”; NSString *str1=[[NSString alloc]initWithString:str]; NSString *str2=[[NSSt

NSDictionary以及NSMutableDictionary用法總結

轉自: http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 如有侵犯,請來信[email protected] NSNull NSNull大概是Cocoa裡最簡單的類了,只有一個方法

Objective-C中NSArrayNSMutableArray是如何使用的?

Objective-C的陣列比C++,Java的陣列強大在於,NSArray儲存的物件可以是不同的物件。但只能儲存物件,int ,char,double等基本資料型別不能直接儲存,需要通過轉換成物件才能加入陣列。 1、NSArray 不可變陣列 [array count]

ios/iphone NSArrayNSMutableArray的常用方法

/* 初始化方法:     1.init返回一個空陣列      2.initWithArray從已有陣列初始化      3.initWithContentsOfFile//從plist檔案載入      4.initWithContentsOfUrl//從網路地址上獲取      5.initWithOb

OC--NSArrayNSMutableArray

NSArray: 只能存放物件。不能存放C語言中基本的資料型別。如int/double/float等等 陣列下標越界不會有警告,執行時會直接報錯 // 不可變陣列NSArray // 在陣列從存入nil需要使用NSNull,不可以直接存入nil,因為在陣列中ni

iOS開發學習專題-基礎知識(三)NSDictionary字典NSMutableDictionary可變字典NSDictionary字典和json轉換詳細使用方式

本文主要講解的是不可變字典NSDictionary可變字典NSMutableDictionary字典NSDictionary和Json轉換詳細使用方式包括型別和值之間的轉換 文章是博主原創,轉載請

oc知識總結三 NSDictionaryNSMutableDictionary

注:字典是由鍵-值對組成的資料集合,他是無序的一組集合,我們通過key查詢對應的value,key通常是字串物件,在字典中,key的值必須是唯一的,而且key不能為空。 字典分為兩種:不可變字典(NSDictionary)和可變字典(NSMutableDctionary)