OC_数组与字典

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC_数组与字典相关的知识,希望对你有一定的参考价值。

数组

 

 

知识点

1.NSArray

2.NSMutableArray 

 

===========   NSArray  不可变数组  =================

 

 

1、OC数组和c数组的区别

  1)NSArray是一个类,是任意类型对象地址的集合(存储对象的引用)

不能存放简单的基本数据类型(int, float, NSInteger…)

  2)C数组时相同类型变量的有序结合,可以保存任意类型的数据

  3)NSArray下标越界不会有警告,但是运行会直接报错

 

 

2、数组创建

         1)如何创建一个空数组

        (1)NSArray *array2 = [[NSArray alloc] init];

      (2)NSArray *array2 = [NSArray array];

 

         2)通过指定对象创建数组

                 //可以有多个对象

                NSArray *array2 = [[NSArray alloc] initWithObjects:@"aaa",@"bbb", nil];

        NSArray *array2 = [NSArray arrayWithObjects:@"aaa",@"bbb", nil];

        //只能有一个对象

        NSArray *array2 = [NSArray arrayWithObject:@"ccc"];

   

         3)通过指定数组创建数组

             (1)NSArray *newArray = [[NSArray alloc] initWithArray:old];

      (2)NSArray * newArray = [NSArray arrayWithArray:old];

 

        4)通过简单的方式创建数组

               //@[] 快速创建数组

        NSArray *array3 = @[@"333”,dog,@“444"];

 

         

     3.    NSArray * array = [str componentsSeparatedByString:@" "];

     //component 组合, separate 分割

     //分割原字符串,创建很多小子串,创建一个数组,存储小子串地址,返回数组地址

     //原字符串不变

        

        

     //利用分隔符拼接数组元素,生成新字符串

     NSString * newStr = [array componentsJoinedByString:@"*"];

 

 

 

     4.获取数组元素个数

           NSUInteger count = [array3 count];

 

 

      5.通过索引获取相应的元素

        id obj = [array3 objectAtIndex:1];

    id obj = array3[下标];

 

 

      6.通过对象获取在数组中的索引

         NSUInteger index = [array3 indexOfObject:@"444"];

 

 

       7.取出数组的最后一个元素或者第一个元素

          //取数组的第一个元素

     [array3 firstObject];  

      array3[0];

  [array3 objectAtIndex:0];

 

     //取数组的最后一个元素

     [array3 lastObject];

 

       8.判断数组中是否包含某个元素

         BOOL isContains = [array3 containsObject:@"4444"];

 

 

 

=========     NSMutableArray可变数组    =============

 

   1.NSMutableArray : NSArray

     //凡是NSArray的方法,NSMutableArray都能用。

     //凡是传参传NSArray*,也可以传NSMutableArray*

 

  2.NSMutableArray的作用

       //NSMutableArray是一个类;

      //数组元素不能是基本数据类型(比如int);

       //数组元素只能是对象的引用(指针);

      //OC语言里引用和指针是一个概念

 

 

3.如何创建一个NSMutableArray

          1)创建空数组

           NSMutableArray *array = [[NSMutableArray alloc] init];

       

 

            2)创建有对象的数组

           

       NSMutableArray * array = [[NSMutableArray alloc] initWithObjects:@"data1",@"data2",nil];

 

     

    4.可变数组添加元素

        1)向可变数组里面添加元素

       //添加一个对象(在数组里面最后一个对象后面添加)

             [array addObject:对象];

 

        2)如何向可变数组中插入一个元素

      [array insertObject:@"nihao" atIndex:0];

 

 

     3)重置数组

   [array setArray:@[@"One", @"Two"]];

 

      5.根据数组下标取值

     NSString *firstObj = [array objectAtIndex:0];

 

 

6.取出数组元素个数

NSUInteger count = [array count];

    

  7、如何删除元素

      1)删除指定索引的元素

              [array removeObjectAtIndex:下标];

 

    2) 删除最后一个元素

             [array removeLastObject];

 

    3)根据指定对象来删除元素

            [array removeObject: 要删除的元素];

 

    4)删除所有元素

            [array removeAllObjects];

 

        8.替换元素

     [array replaceObjectAtIndex:0 withObject:@"hello"];

 

        9.交换两个元素

     [array exchangeObjectAtIndex:0 withObjectAtIndex:1];

 

 

=========================================================

练习:

对数组@[@“aa”,@“bb”,@“cc”,@“dd”]进行逆序;

 

 

 

 

   =============  NSArray数组的遍历 ===========

   1.通过下标遍历数组

     for (int i = 0; i < [array count]; i++)

        {

            NSLog(@"%d-%@",i,array[i]);

        }

 

 

 

   2.快速枚举法(for in)

     /*

        for (数组里面的类型 in 遍历的数组) {

            <#statements#>

        }

         */

        for (NSString *s in array)

        {

            

            

        }

 

 

 

   3、NSEnumerator  枚举器

        1)objectEnumerator消息

    作用:正序输出所有元素

        2)reverseObjectEnumerator消息

    作用:逆序输出所有元素

 

    //返回一个枚举器

    NSEnumerator *enumerator = [array objectEnumerator];

    //获取枚举器所有的元素

    NSArray *a = [enumerator allObjects];

    

    

    NSString *s = nil;    

   //nextObject指向第一个元素

    s = [enumerator nextObject];

     

 

********************************************************************************************

 

 

 字典

1.NSDictionary 类

2.NSMutableDictionary 类

 

********************************************************************************

//NSDictionary 和 NSMutableDictionary

//NSMutableDictionary : NSDictionary

//两个凡是

 

 

===========    NSDictionary不可变字典    ================

1、什么是字典(key-value)  

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

2、字典的元素是什么

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

3、什么是键值对

键值对是由key和value构成必须一一对应

键值对中的key必须保证是唯一的

4、字典的存储方式

  字典是一种无序保存的集合

5、如何查找值

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

 

 

数组(array):有序,不唯一,有索引

字典(Dictionary):无索引,有键值, 键不重复,对应的值可以重复

 

 

===================NSDictionary不可变字典====================

 

//创建字典对象

(1)创建空字典

   NSDictionary *dic = [[NSDictionary alloc] init];

   NSDictionary *dic = [NSDictionary dictionary];

(2)创建带有对象的字典

   NSDictionary * dict = [[NSDictionary alloc]  

   initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", 

   @"3", @"One",  @"4", nil];

 

   NSDictionary * dict2 = @{@"1" : @"One", @"2" : @"Two", @"3" :

   @"Three"};

 

(3)通过传入键,返回值的地址,如果没有对应的键,返回nil

  NSString * value = [dict objectForKey:@"3"];

  NSString * value = dict[@"3"];

 

(4)返回键值对总数

  NSUInteger count = [dict count];

 

(5)返回所有的键

  NSArray * keys = [dict allKeys];

 

(6)返回所有的值

  NSArray * values = [dict allValues];

 

 

 

==============NSMutableDictionary可变字典=======

//重置字典

[mutableDict setDictionary:@{@"1" : @"One", @"2" : @"Two", @"3" : @"Three”}];

        

//增/或修改

[mutableDict setObject:@"Four" forKey:@"4"];

        

//删

//通过键删除值

[mutableDict removeObjectForKey:@"3"];

 

//删除所有键值对

[mutableDict removeAllObjects];

 

======================================

 

8、遍历字典内容

1)枚举器法:

  <1>键的遍历:

  keyEnumerator消息

  作用:获取所有的key值

NSEnumerator *emunerator = [dict keyEnumerator];

while (id obj = [emunerator nextObject]) {

NSLog(@“%@“, obj);

}

 

  <2>值的遍历

  objectEnumerator 消息

 

 

 

2)快速枚举法:得到的是键

for (id key in dict)

{

NSLog(@“key — %@, value = %@, key, [dict objectForKey:obj]); // 得到了键就得到了值

}

 

以上是关于OC_数组与字典的主要内容,如果未能解决你的问题,请参考以下文章

swift实现遍历嵌套字典并修改其中的值

swift实现遍历嵌套字典并修改其中的值

OC - 数组字典集合

OC_YYModel字典转模型的几种详细用法

OC中第三方库MJExtension的使用

OC7(遍历集合,数组排序)