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; }