1. 程式人生 > >OC學習五之集合物件

OC學習五之集合物件

NSArray不可存放基本資料型別,只能存放類的例項,如果需要將基本資料型別、結構體放入到陣列的話,需要通過NSNumber、NSValue進行資料封裝,同時不能在NSArray中儲存nil

NSString *str1 = @"zhangsan";
NSString *str2 = @"lisi";
NSString *str3 = @"wangwu";
NSArray *array1 = [[NSArray alloc] initWithObjects:str1,str2,str3,nul];
//列印的時候呼叫的是description方法,相當於 array1.description
NSLog(@"%@",array1);

initWithObjects方法最後一個值為nil,nil是空指標的意思,和Java中的null一樣,為什麼建立NSArray的時候最後一個值為空?
這個是和C語言場景類似,C語言中,字串結尾符為‘/0’,那麼這個地方NSArray最後一個元素nil則是標記NSArray結束。
description方法和Java中的toString仿發一樣,我們也可以重寫這個方法。

NSArray *array2 = [NSArray arrayWithArray:array1];

使用下標訪問元素

NSString *str1 = [array1 objectAtIndex:0];

獲取陣列的大小

,返回的是一個無符號陣列

NSUInteger count = [array1 count];

是否包含某一個元素,判斷的是指標物件,不是物件中的值

BOOL isContains = [array1 containsObject:@"zhangsan"];

找到一個元素在陣列中的下標

NSUInteger index = [array1 indexOfObject:@"zhangsan"];
if(index == NSNotFound){
    //沒有找到
}else{
    //找到了
}

NSNotFound是系統常量,定義為Long型別的最大值

使用指定的連線符連線陣列中的所有元素

,只有陣列中的元素是字串時,才可以用

NSString *content = [array1 componentsJoinedByString:@";"];

在陣列尾部增加一個元素,需要返回一個新的陣列,因為原陣列是不可變的

NSArray *array3 = [array1 arrayByAddingObject;@"zhaoliu"];

陣列的遍歷,第二種方法和Java中的快速遍歷一樣

for(int i = 0;i<array1.count;i++){
    NSString *str = [array objectAtIndex:i];
}

for(NSString *str in array1){
    
}

Xcode4.4之後新增了款速建立NSArray的方式,這種方法快且方便,可以直接用下標去獲取元素

NSArray *array5 = @[str1,str2,str3];
NSString *s = array5[0];

NSMutableArray類

NString是不可變的,NSMutalbeArray是可變的,可變類的屬性就是可以進行增刪改查的操作

 

NSDictionary

和Java中Map類很像,OC中叫字典由鍵值對key-value構成的資料集合,字典是無序的,Java中的Map也是無序的,通過hash值去索引

建立方法

NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangwang",nil];
NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"lihaha",nil];
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li",nul];

NSDictionary類基於NSArray的,其他的和Java中的Map差不多,一般都是key-value的形式,

新增元素

NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];

獲取所有元素的key

NSArray *allKeys  = [dict allKeys];

獲取所有元素的Value,可能為二位陣列

NSArray *allValues = [dict allValues];

通過key獲取value

NSArray *values = [dict objectForKey:@"zhang"];

NSDictionary的快速建立方式和訪問方式

NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};

NSArray *array4 = dict3["zhang"];

NSMutableDictionary 可變字典

建立可變字典、新增元素,可以指定其大小,當容量滿的之後,會自動擴容

NSMutalbeDictionary *md1 = [NSMutableDictionary alloc] initWithCapacity:3];
NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lisi",nil];

//--------新增元素---------
[md1 setObject:array1 forKey:@"zhang"];

NSMutableDictionary *md2 = [[NSMutableDictionary alloc]initWithCapacity:3];
[md2 addEntriesFromDictionary:md1];

刪除元素

[md1 removeObjectForKey:@"zhang"];//以key刪除
[md1 removeAllObjects];//刪除所有元素
[md1 removeObjectsForKeys:array1];//以value刪除

遍歷字典

//快速遍歷
for(NSString *key in md1){
    NSAarray *values = [md1 objectForKey:Key];
    for(NSString *v in values){
    }
}
//普通遍歷
NSArray *allkey = [md1 allkeys];
for(int i=0;i<allKey.count;i++){
    NSArray *value = [md1 objectForKey:allKey[i]];
}

NSSet&NSMutableSet
用法和NSArray非常相似,NSArray的區別在於NSSet物件不能放重複資料,並且也是無序的。