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

 

posted @ 2014-12-14 16:45  sublimter随想博客  阅读(886)  评论(0编辑  收藏  举报