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