iOS开发之oc(二十)--Foundation(5)NSDictionary

/*

 集合

 1.NSArray\NSMutableArray

•有序

•快速创建(不可变):@[obj1, obj2, obj3]

•快速访问元素:数组名[i]

  2.NSSet\NSMutableSet

•无序

 3.NSDictionary\NSMutableDictionary

•无序

•快速创建(不可变):@{key1 : value1,  key2 : value2}

•快速访问元素:字典名[key]

*/

NSDictionary:字典

代码示例

1>

void create()
{
/*
     字典:

     key ----> value
     索引 ----> 文字内容

     里面存储的东西都是键值对
*/

    // 字典创建方式

    // NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

    // NSArray *keys = @[@"name", @"address"];
    // NSArray *objects = @[@"jack", @"北京"];

    // NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

 /*
     NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
     @"jack", @"name",
     @"北京", @"address",
     @"32423434", @"qq", nil];
*/

    // 最实用的方法
    NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

    // id obj = [dict objectForKey:@"name"];
    // 获取值
    id obj = dict[@"name"];

    NSLog(@"%@", obj);

    // 返回的是键值对的个数
    NSLog(@"%ld", dict.count);
}

2> 基本使用

void use1()
{
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    // 添加键值对
    [dict setObject:@"jack" forKey:@"name"];

    [dict setObject:@"北京" forKey:@"address"];

    [dict setObject:@"rose" forKey:@"name"];

    // 移除键值对
    // [dict removeObjectForKey:<#(id)#>];

    NSString *str = dict[@"name"];

    //NSLog(@"%@", str);

    NSLog(@"%@", dict);

    //NSLog(@"%@", @[@"jack", @"rose"]);
}

void use2()
{
    NSMutableDictionary *dict = @{@"name" : @"jack"};

    [dict setObject:@"rose" forKey:@"name"];
}

void use3()
{
    // 字典不允许有相同的key,但允许有相同的value(Object)
    // 字典的无序的
    NSDictionary *dict = @{
    @"address" : @"北京",
    @"name" : @"jack",
    @"name2" : @"jack",
    @"name3" : @"jack",
    @"qq" : @"7657567765"};

    //    NSArray *keys = [dict allKeys];
    //
    //    for (int i = 0; i<dict.count; i++)
    //    {
    //        NSString *key = keys[i];
    //        NSString *object = dict[key];
    //
    //
    //        NSLog(@"%@ = %@", key, object);
    //    }

 // 使用Block来访问
    [dict enumerateKeysAndObjectsUsingBlock:
     ^(id key, id obj, BOOL *stop) {
         NSLog(@"%@ - %@", key, obj);

         // *stop = YES;
     }];
}
#import <Foundation/Foundation.h>

int main()
{
    NSArray *persons = @[
    @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
    @{@"name" : @"rose", @"qq" : @"767567"},
    @{@"name" : @"jim", @"qq" : @"423423"},
    @{@"name" : @"jake", @"qq" : @"123123213"}
    ];

    // NSDictionary *jim = persons[2];

    NSString *bookName = persons[0][@"books"][1];
    NSLog(@"%@", bookName);
    //NSArray *array = persons[0][@"books"];

    //NSLog(@"%@", array);

    // 先取出1位置对应的字典
    // 再取出字典中qq这个key对应的数据
    //NSLog(@"%@", persons[1][@"qq"]);

    // NSLog(@"%@", jim);
    return 0;
}

代码是以前学习时照着李明杰老师的视频敲的,再次,向他表示感谢;李老师说的很好,推荐大家去看,他交的不是编程,而是一种思想,让我受益匪浅。

时间: 2024-10-22 09:36:49

iOS开发之oc(二十)--Foundation(5)NSDictionary的相关文章

iOS开发之oc(十六)--Foundation(1)结构体

(一)要掌握这些的运用 NSRange(location length) ---范围                                    range:范围 NSPoint\(相当于)CGPoint ---点 NSSize\CGSize   ---尺寸 NSRect\CGRect (CGPint CGSize) ---相当于一个矩形 其实,看官方文档更能清楚,这些的用法,需要声明方法就Jump to去看,在此,仅仅列出简单用法,作为了解 (二)代码示例 1. void range

iOS开发之oc(十二)--内存管理ARC

(一)自动内存管理 --ARC 1>简单点说就是让编译器完成堆空间的引用计数的加减,自动释放,程序员不再写retain 和release等方法 2>OC的自动内存管理不同于java 的垃圾回收,而是在预处理是直接在应该保留的地方加上retain,在应该改释放的地方加上release,是直接添加代码 3>从效率上讲,ARC优于手动内存管理 2.1.1 ARC 的局限性 1>使用ARC可能因为代码的不规范,导致内存提前释放 2>导入第三方库,或者导入旧代码,这些代码不支持ARC

iOS开发之oc(十九)--Foundation(4) NSSet

NSSet作用:存放的是没有顺序的对象 NSSet和NSArray的对比 1> 共同点 •都是集合,都能存放多个OC对象 • 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int.char.float等,结构体,枚举) •本身都不可变,都有一个可变的子类 2> 不同点 •NSArray有顺序,NSSet没有顺序 代码示例 #import <Foundation/Foundation.h> int main() { NSMutableSet *s = [NSMutableS

iOS开发之oc(十八)--Foundation(3)NSArray和NSMutableArray

NSArray :不可变数组 NSMutableArray : 可变数组 C语言数组:存放基本数据类型 OC数组:只能存放OC对象.不能存放非OC对象类型,比如int.struct.enum等 1.不可变数组的创建 void create() { /* int a = 5; int ages[10] = {1, 90, 89, 17}; // C数组 Person *p = [[Person alloc] init]; // OC数组(下面) Person *persons[5] = {p, [

iOS开发之oc(十)--类的本质、description、SEL

(一)类的本质 1.类也是个对象 其实类也是一个对象,是Class类型,简称“类对象”. // Class类型的定义 typedef struct objc_class *Class; // 类名就代表着类对象,每个类只有一个类对象 2.+load和+initialize +load >  在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法 >先加载父类,再加载子类:也就是先调用父类的+load,再调用子类的+load >先加载元原始类,再加载分类 >不管程序

iOS开发之oc(十四)--protocol协议(2)补充

(一) protocol-限制对象 1.创建一个最纯洁的对象 2.示范出如何限制 (二)protocol--协议书写位置

iOS开发之oc(十四)--protocol协议(1)

protocol:协议 想要拥有某些方法声明通过: // : 继承父类 // <> 遵守协议 协议:就是用来声明方法的,想要拥有某些方法声明,只需要遵守协议. 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end // 定义了一个名叫MyProtocol的协议 @protocol MyProtocol <NSObject> // @required 要求实现,不实现就会发出警告(默认是这个) // @optional

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二)

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二) 上一篇解决了ZBarSDK不支持64bit的问题,下面我们就可以使用ZBarSDK了. 导入ZBarSDk.h文件 附上代码: // //  MeViewController.m //  Auditory Blog // //  Created by 寒竹子 on 15/4/28. //  Copyright (c) 2015年 寒竹子. All rights reserved. // #define ScanWidth  2

ios开发之OC基础-类和对象

本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来.这样的学习方法会带来更多的收获,同时要多做练习,按照思路,默写.改写代码.在这里,感谢欧阳坚老师,学习你的课程使我走上了ios的开发之路. 一定要明确一个要从事的方向,要不然就会感到迷茫.学习ios开发,并且从事ios开发这个行业,这就是我的选择.看到我的博客系列文章,其中大

iOS开发之oc(二十二)--Foundation(7)NSValue、NSDate

NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue (一)NSValue值转换 #import <Foundation/Foundation.h> int main() { // 结构体--->OC对象 CGPoint p = CGPointMake(10, 10); // 将结构体转为Value对象 NSValue *value = [NSValue valueWithPoint:p]; // 将value转为对应的结构体 // [value pointValu