zoukankan      html  css  js  c++  java
  • NSDictionary

    NSDictionary

    1、字典的初始化:

    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"v" forKey:@"k"];
    //NSDictionary是不可变字典,dictionaryWithObject: forKey:方法用于给字典dict赋值@"v"和键@"k"。
    
    // 最常用的初始化方式:
    dict = [NSDictionary dictionaryWithObjectsAndKeys:
                @"v1", @"k1",
                @"v2", @"k2",
                @"v3", @"k3", nil];
    //dictionaryWithObjectsAndKeys: 方法用来给字典dict赋多个值键对儿。
    
    NSArray *objects = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
    NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
    dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
    //dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys 方法用于把值的集合与键的集合组合成对应的键值对儿赋给字典dict。
    
    NSLog(@"%@", dict);    //字典也可以用字符串的形式直接打印输出。    

    2、字典的基本用法:

    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                @"v1", @"k1",
                @"v2", @"k2",
                @"v3", @"k3", nil];
    NSLog(@"count=%zi", dict.count); // count 方法 是计算字典dict有多少个键值对(key-value)。
    
    id obj = [dict objectForKey:@"k2"]; 
    //objectForKey: 方法用于取出字典dict中键@"k2"所对应的值;由于NSDictionary是不可变的,所以只能取值,而不能修改值。
    
    NSLog(@"obj=%@", obj); //id类型的对象也可以用字符串的形式直接打印输出。
    
    NSString *path = @"/Users/apple/Desktop/dict.xml";
    [dict writeToFile:path atomically:YES]; //将字典写入指定路径文件path中。
    
    dict = [NSDictionary dictionaryWithContentsOfFile:path];
    //从指定路径文件中读取内容写入字典dict中,注:制定的文件必须是XML格式的文件。
    
    -(BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary
    //比较两个字典是否相同。
    
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                   @"v1", @"k1",
                   @"v2", @"k2",
                   @"v3", @"k3", nil];
    NSArray *keys = [dict allKeys]; //allKeys 方法返回字典dict中所有的key。
    NSArray *objects = [dict allValues]; //allValues 方法返回字典dict中所有的Values。
    
    objects = [dict objectsForKeys:[NSArray arrayWithObjects:@"k1", @"k2", @"k4", nil] notFoundMarker:@"not-found"];
    //根据多个key(多个key的体现形式是把多个key放在数组中,然后提供这个存了多个key的数组,如上例:[NSArray arrayWithObjects:@"k1", @"k2", @"k4", nil])取出字典中对应的多个value;当key找不到对应的value时,用marker参数值@"not-found"代替value。
    
    -(NSArray *)allKeysForObject:(id)anObject 
    //返回anObject元素对应的所有key。
    //注:一个key只可以对应一个value,而一个value可以对应多个key.
    //注:一个key只可以对应一个value,而一个value可以对应多个key.

    3、遍历字典:

      1>for-in

    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                @"v1", @"k1",
                @"v2", @"k2",
                @"v3", @"k3", nil];
    
    //只遍历字典的所有key,因为一个value可能对应多个key。
    for (id key in dict) 
    {
         id value = [dict objectForKey:key];
         NSLog(@"%@=%@", key, value);
    }

      2>通过迭代器遍历字典

    //通过key迭代器遍历字典:
    NSEnumerator *enumer = [dict keyEnumerator];
    id key = nil;
    while ( key = [enumer nextObject]) {
         id value = [dict objectForKey:key];
         NSLog(@"%@=%@", key, value);
    }
    
    // 通过对象迭代器遍历字典:
    NSEnumerator *enumer = [dict objectEnumerator];

      3>通过Block遍历字典:

    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
            @"v1", @"k1",
            @"v2", @"k2",
            @"v3", @"k3", nil];
    
    [dict enumerateKeysAndObjectsUsingBlock:
         ^(id key, id obj, BOOL *stop) {
            NSLog(@"%@=%@", key, obj);
    }];
    //enumerateKeysAndObjectsUsingBlock: 方法是每遍历一次键值对儿就会调一次Block。

    4、NSDictionarykey排序:

    -(NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr
    
    -(NSArray *)keysSortedByValueWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr
    
    -(NSArray *)keysSortedByValueUsingSelector:(SEL)comparator
    
    //以上三个排序方法参考NSArray的排序。

    NSMutableDictionary

    // 创建一个空的可变字典:
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    
    Student *stu1 = [Student studentWithName:@"stu1"];
    Student *stu2= [Student studentWithName:@"stu2"];//创建了两个对象。
    
    [dict setObject:stu1 forKey:@"k1"];//对象添加进可变字典中。
    NSLog(@"stu1:%zi", [stu1 retainCount]); //stu1的计数器会+1
    
    NSDictionary *other = [NSDictionary dictionaryWithObject:@"v2" forKey:@"k2"];
    
    [dict addEntriesFromDictionary:other];//添加其他字典other中键值对到当前字典dict中。
    
    [dict removeAllObjects]; // 删除字典dict中所有的键值对。 
    [dict removeObjectForKey:@"k1"];// 删除k1对应的值stu1,stu1会自动做一次release操作。
    [dict removeObjectsForKeys:[NSArray arrayWithObject:@"k1",@”k2”,nil]];
    // 删除多个key对应的value,需要把多个key存入一个数组中,把数组作为参数传给removeObjectsForKeys:方法。
    // 字典被销毁时,内部的所有key和value计数器都会-1。 
    
    //NSMutableDictionary可变字典的其他初始化方法:
    +(id)dictionaryWithCapacity:(NSUInteger)numItems
    -(id)initWithCapacity:(NSUInteger)numItems
    
    //NSMutableDictionary添加元素:
    -(void)setDictionary:(NSDictionary *)otherDictionary//设置当前集合的元素
    -(void)setObject:(id)anObject forKey:(id)<NSCopying>aKey//添加一个键值对。

      注:OC中数组和字典只能存储OC对象不能存放基本数据类型。 

  • 相关阅读:
    AI Dropout
    笔记2 区块链
    Visual Studio的下载安装
    第48课 thinkphp5添加商品库
    一个手机号可以注册绑定5个百度网盘,永久2T
    第39-43课 thinkphp5完成商品会员价格功能(后置勾子afterInsert)
    第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)
    php中 为什么验证码 必须要开启 ob_clean 才可以显示
    网站同一用户只能在同一个地方登录
    微信小程序第3课 目录结构及小知识点
  • 原文地址:https://www.cnblogs.com/CJDog/p/5125310.html
Copyright © 2011-2022 走看看