zoukankan      html  css  js  c++  java
  • 黑马程序员-Foundation框架之数组和字典

    一、Foundation框架简介

    Foundation框架,顾名思义就是基础框架。基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础。OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类。要使用这个框架需要在引入头文件#import <Foundation/Foundation.h>

    二、数组

    NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组。下面通过代码来看一下它的一些基本的用法。

     1 #import <Foundation/Foundation.h>
     2 
     3 int main(int argc,const char* argv[])
     4 {
     5     NSArray *arrayWithEmpty = [NSArray array]; // 创建一个空数组,这个数组永远为空
     6     NSArray *array1 = [NSArray arrayWithObject:@"Himym!"];  //  创建非空数组,含一个元素
     7     NSArray *array2 = [NSArray arrayWithObjects:@"Himym",@"Robb",nil];  // 创建非空数组,含多个元素,以nil结尾
     8     NSArray *array3 = @[@"HImym",@"Baratheon",@"Miss Gao"]; // 快速创建一个对象
     9     NSLog(@"array2 ---- %ld, array3 ---- %ld",array2.count,array3.count); // 数组元素个数
    10     NSLog(@"%@",[array2 objectAtIndex:1]);
    11     NSLog(@"%@",array[2]);   // 访问数组元素
    12     NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"Himym",@"Robb",nil];
    13     [array4 addObject:[[Person alloc] init]];
    14     [array4 addObject:@"NaNa"];  //  往数组里面添加元素
    15     [array4 removeObject:@"Miss Zhao"];
    16     [array4 removeObjectAtIndex:1];
    17     [array4 addObjectsFromArray:array2];
    18     for(id obj in array4)  // 遍历数组
    19     {
    20         NSUInteger i = [array4 indexOfObject:obj];
    21         NSLog(@"%ld ---- %@",i,obj);
    22         if(i == 3)
    23         break;
    24     }
    25     [array4 enumerateObjectsUsingBlock:^(id obj,NSUinteger i,Bool *stop) // 用block块遍历
    26     {
    27         NSLog(@"%ld ---- %@",i,obj);
    28         if(i == 2)
    29          *stop = YES;
    30     }];
    31     return 0;
    32 }

    注意问题:

    > @[] 只创建不可变数组NSArray,NSMutableArray *array = @[@"jack", @"rose"];是错误写法

    > 数组不能存放nil值;只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等。

    三、字典

    字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合。通过key来查找value,key可以是任意类型对象,但是其值必须是唯一的。

    下面通过代码来看一下基本用法

     1 #import <Foundation/Foundation.h>
     2 
     3 int main(int argc, const char * argv[])
     4 {
     5     
     6     // 创建字典
     7     NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Himym.Baratheon" forKey:@"name"];
     8     NSArray *name = @[@"Himym.Baratheon",@20];
     9     NSArray *key = @[@"name",@"age"];
    10     NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:name forKeys:key];
    11     NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"Ned.Start",@"name",@20,@"age", nil];
    12     
    13     // 快速创建
    14     NSDictionary *dic0 = @{@"name":@"Joffray.Lannister",@"age":@18}; // 注意是大括号
    15     NSLog(@"dic1 = %@
    dic2 = %@
    dic3 = %@
    dic0 = %@",dic1,dic2,dic3,dic0);
    16     
    17     // 取键值
    18     id obj1 = [dic0 objectForKey:@"name"];
    19     id obj2 = dic1[@"name"];
    20     NSLog(@"%@ --- %@ --- %ld",obj1,obj2,dic0.count);
    21     
    22     // 创建可变字典
    23     NSMutableDictionary *mdic1 = [NSMutableDictionary dictionary];
    24     
    25     // 添加元素
    26     [mdic1 setObject:@"Robb.Stark" forKey:@"name"];
    27     [mdic1 setObject:@17 forKey:@"age"];
    28     [mdic1 setObject:@"He is dead" forKey:@"life"];
    29     [mdic1 setObject:@"Sansa" forKey:@"name"];  // 将原有name覆盖
    30     NSLog(@"%@",mdic1);
    31     
    32     // 取键值
    33     id obj3 = mdic1[@"name"];
    34     NSLog(@"%@",obj3);
    35     
    36     // 删除键值对
    37     [mdic1 removeObjectForKey:@"age"];
    38     
    39     // 遍历字典
    40     //NSArray *array1 = [mdic1 allValues];
    41     //NSLog(@"%@",array1);
    42     for(id obj in [mdic1 allValues])
    43     {
    44         NSLog(@"value --- %@",obj);
    45         
    46     }
    47     for(id obj in [mdic1 allKeys])
    48     {
    49         NSLog(@"key --- %@",obj);
    50     }
    51     
    52     [mdic1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop)
    53      {
    54          NSLog(@"key: %@ ------ value: %@",key,obj);
    55      }];
    56     
    57     for(id key in mdic1)
    58     {
    59         id obj = [mdic1 objectForKey:key];
    60         NSLog(@"value --- %@    key --- %@",obj,key);
    61     }
    62     
    63     // 字典元素的访问
    64     NSArray *person = @[
    65     @{@"name":@"Himym.Baratheon",@"age":@25,@"QQ":@"395696600",@"girlfrends":@[@"NaNa",@"ZhaoChao"]},
    66     @{@"name":@"Joffray.Lannister",@"age":@18},
    67     @{@"name":@"Ned.Stark",@"age":@31},
    68     @{@"name":@"Serse.Lannister",@"age":@24}
    69     ];
    70     NSDictionary *ned = person[2];
    71     NSString *nana = person[0][@"girlfrends"][1];
    72     NSArray *girl = person[0][@"girlfrends"];
    73     NSLog(@"%@
    %@
    %@",ned,nana,girl);
    74     
    75     return 0;
    76 }

    注意的问题:

    > 字典的快速创建是用大括号@{},这点有别于数组的快速创建@[]。并且快速创建只适用于NSDictionary。

    > 字典里面的键值对是无序排列的,而数组里的元素是有序的。

  • 相关阅读:
    1
    vim配置
    pyspark
    添加底部小火箭+目录
    00
    博客园代码高亮设置
    01. 枚举类型
    01. 授权问题
    Android Studio打包签名全过程
    linux 阿里云源地址
  • 原文地址:https://www.cnblogs.com/pangjiayang/p/4015991.html
Copyright © 2011-2022 走看看