• 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;
    }
    
  • 相关阅读:
    神经网络加速与模型压缩
    字符串分割函数
    物体检测整理
    deeplab算法解析
    kmeans算法
    封装caffe版的deeplab为库供第三方使用
    进程 守护
    socketserver tcp黏包
    计算机
    网络 协议 2
  • 原文地址:https://www.cnblogs.com/sublimter/p/4162708.html
Copyright © 2020-2023  润新知