首页 > 代码库 > OC语言--数组&字典

OC语言--数组&字典

1.数组

 

1.1 不可变数组(只读数组)

 

注意:OC数组和C数组的区别:

-》创建方式不同;

-》OC数组本身也是一个对象,是任意类型对象地址的集合;

-》OC兼容C的数组,可用于存储对象;

 

(1) 创建数组对象

 

-》方式一:NSArray *array = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", @"one", nil];//nil 作为OC数组声明的结束符,不在 OC 数组元素中; -》方式二://采用类方法来创建 OC 数组对象NSArray *array2 = [NSArray arrayWithObjects:@"one", @"two", @"four", nil]; -》方式三(Objective-c 2.0新特性支持): Xcode4.6以后的版本支持NSArray *array3 = @[@"One One", @"Two", @"Three", @"Four"];

 

 

(2) 数组元素

-》数组元素是任意类型的对象地址

 

(3)遍历数组 

-》for循环遍历

-》快速枚举法 for in 结构

 

(4)常用方法

1 常见创建方法- (id)initWithObjects:(id)firstObj, ...;- (id)initWithArray:(NSArray *)array;+ (id)arrayWithObjects:(id)firstObj, ...;+ (id)arrayWithArray:(NSArray *)array; 2 获取数组元素个数- (NSUInteger)count; 3 通过索引,获取相应的元素- (id)objectAtIndex:(NSUInteger)index; 4 通过对象地址,获取在数组中的索引- (NSUInteger)indexOfObject:(id)anObject; 5 判断数组中,数组包含元素anObject- (BOOL)containsObject:(id)anObject; 6 获取数组的最后一个元素- (id)lastObject; 7 把数组元素内容,按照字符串separator进行拼接- (NSString *)componentsJoinedByString:(NSString *)separator;

 

 

1.2 可变数组

 

(1) 概念:

-》对象内容可以改变

 

(2) 可变数组与不可变数组的关系

-》NSMutableArray 继承于 NSArray

 

(3) 对可变数组对象进行增删改的操作

 

(4) 可变数组的排序

-》使用冒泡/选择法,两层for循环对可变数组排序

-》使用方法: 

- (void)sortUsingSelector:(SEL)comparator;

注:

这个排序方法已经实现,需要我们提供一个排序准则;

我们需要把一个比较方法转化为SEL选择器类型传入上述排序方法,

这个比较方法需要写在数组元素所在的类中。

 

(5)常用方法

               1 增加数组元素		-》追加元素			- (void)addObject:(id)anObject;		-》指定索引插入元素			- (void)insertObject:(id)anObject atIndex:			(NSUInteger)index;		-》追加一个数组			- (void)addObjectsFromArray:(NSArray *)otherArray;		2 删除		-》删除最后一个元素			- (void)removeLastObject;		-》删除指定索引的一个元素			- (void)removeObjectAtIndex:(NSUInteger)index;		-》删除所有元素			- (void)removeAllObjects;		-》删除指定范围内所有的某个元素			- (void)removeObject:(id)anObject 			inRange:(NSRange)range;		-》删除指定的一个元素			- (void)removeObject:(id)anObject;		-》删除由一个数组所给定的所有元素			//给定的数组 otherArray中的元素,是要被删除的所有元素			- (void)removeObjectsInArray:(NSArray *)otherArray;		3 修改数组//用一个数组覆盖另一个数组	     		- (void)setArray:(NSArray *)otherArray;				4 替换指定索引的元素	  		- (void)replaceObjectAtIndex:(NSUInteger)index 			withObject:(id)anObject;		5 交换数组元素	  		- (void)exchangeObjectAtIndex:(NSUInteger)idx1 			withObjectAtIndex:(NSUInteger)idx2;		6 排序:根据排序准则排序		//利用选择器来排序;选择器是函数指针对象,SEL 是函数指针对象的类型	  		- (void)sortUsingSelector:(SEL)comparator;

 

eg.示例代码

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){  @autoreleasepool {          NSArray* aArray = [[NSArray alloc]initWithObjects:@"ni",@"wo",@"ta", nil];        for (NSUInteger i = 0; i < [aArray count]; i++) {      NSLog(@"%@",[aArray objectAtIndex:i]);    }      //mutable版本的数组遍历    NSMutableArray* muaArray = [[NSMutableArray alloc]initWithObjects:@"ni",@"wo",@"ta", nil];        for (NSUInteger i = 0; i < [aArray count]; i++) {      NSLog(@"%@",[muaArray objectAtIndex:i]);    }      //添加一个数组元素    [muaArray addObject:@"nimen"];      //检测数组中是否包含特定元素      //判断数组中,数组包含元素anObject      //- (BOOL)containsObject:(id)anObject;    if ([muaArray containsObject:@"nimen"]) {      NSLog(@"数组包含该元素");    }else{      NSLog(@"没找到该对象元素");    }    [muaArray removeLastObject];      [muaArray removeObjectAtIndex:0];      //[muaArray removeObject:@"wo"];    for (NSUInteger i = 0; i < [muaArray count]; i++) {      NSLog(@"%@",[muaArray objectAtIndex:i]);    }          }    return 0;}

 

 

 

2.字典

 

2.1 不可变字典

 

(1) 字典

-》字典是也是一种集合结构,功能与我们现实中的字典工具一样

 

(2)字典的元素

-》由任意类型的对象地址构成的键值对

 

(3) 键值对

-》键值对由key和value构成,且必须一一对应

-》键值对中的key在字典中必须保证唯一,不能重复

 

(4) 如何查找值

-》根据键值对中的key,找到相应的值

 

(5) 遍历字典

-》使用快速枚举 for in结构,遍历字典

 

(6)常用方法

 

                1 创建方法		-》实例化方法	  		- (id)initWithObjectsAndKeys:(id)firstObject, ...;	  		- (id)initWithDictionary:					(NSDictionary *)otherDictionary;	  		- (id)initWithObjects:(NSArray *)objects 			forKeys:(NSArray *)keys;		-》类方法创建	  		+ (id)dictionaryWithObjectsAndKeys: 			(id)firstObject, ...;	  		+ (id)dictionaryWithDictionary:(NSDictionary *)dict;	  		+ (id)dictionaryWithObjects:(NSArray *)objects 			forKeys:(NSArray *)keys;		2 获取键值对的个数	  		- (NSUInteger)count;		3 根据key 获取相应的值	  		- (id)objectForKey:(id)aKey;		4 获取字典中所有的key	  		- (NSArray *)allKeys;		5 获取值是anObject的所有的key	  		- (NSArray *)allKeysForObject:(id)anObject;    		6 获取字典中所有的值	  		- (NSArray *)allValues;

 

 

 

2.2 可变字典

 

(1)常用方法

              1 增加		-》增加整个字典	  		- (void)addEntriesFromDictionary:			(NSDictionary *)otherDictionary;		-》增加键值对			// key不存在则增加, key存在则修改key对应的值	  		- (void)setObject:(id)anObject 			forKey:(id <NSCopying>)aKey;		2 删除		-》根据key,删除键值对	  		- (void)removeObjectForKey:(id)aKey;		-》删除所有键值对	  		- (void)removeAllObjects;		-》根据数组中的内容,删除相应的键值对	  		- (void)removeObjectsForKeys:(NSArray *)keyArray;		3 修改		-》修改整个字典	  		- (void)setDictionary:(NSDictionary *)otherDictionary;		-》修改键值对			// key不存在则增加, key存在则修改key对应的值	  		- (void)setObject:(id)anObject 			forKey:(id <NSCopying>)aKey;

 

eg.示例代码

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){  @autoreleasepool {    NSDictionary* oneDic = [[NSDictionary alloc]initWithObjectsAndKeys:@"BeiJing",@"One",@"Shanghai",@"Two",@"GuangZhou",@"Three", nil];    NSLog(@"%@",oneDic);      //create mutable Dictionary    NSMutableDictionary* twoDic = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"BeiJing",@"One",@"Shanghai",@"Two",@"GuangZhou",@"Three",nil];     NSLog(@"%@",twoDic);      //add a Key-Value couple    [twoDic setObject:@"ShenZheng" forKey:@"Four"];    NSLog(@"%@",twoDic);          //NSArray* keyArray = [NSArray arrayWithObjects:@"Two",@"Four", nil];          //[twoDic removeObjectsForKeys:keyArray];    NSLog(@"%@",twoDic);      //create threeDic by twoDic Value    NSMutableDictionary* threeDic = [NSMutableDictionary dictionary];        NSArray* valueArray = [twoDic allValues];    for (int i = 0; i < [valueArray count]; i++) {      NSString* city = [NSString stringWithFormat:@"%@" ,[valueArray objectAtIndex:i]];        [threeDic setObject:city forKey:[valueArray objectAtIndex:i]];    }        for ( NSString* key in threeDic){      NSLog(@"Key:%@,Value:%@",key,[threeDic objectForKey:key]);    }      }    return 0;}

 

OC语言--数组&字典