zoukankan      html  css  js  c++  java
  • NSDictionary及NSMutableDictionary

    NSDictionary

    1:什么是字典?

    OC中的NSDictionary:根据key找到value,字典中存储的东西都是键值对

    2:如何创建字典?

    方法一:

    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"lnj" forKey:@"name"];
    //根据key获取value
    NSString *name = [dict objectForKey:@"name"];
    NSLog(@"name = %@", name);

     

    方法二:

    /

    / 注意: key和value 是一一对应
    NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"lnj", @"30", @"1.75"] forKeys:@[@"name", @"age", @"height"]];
    NSLog(@"%@ %@ %@", [dict objectForKey:@"name"], [dict objectForKey:@"age"], [dict objectForKey:@"height"]);
    
    方法三:"简写:
    
    NSDictionary *dict = @{key:value};
    NSDictionary *dict = @{@"name": @"lnj"};
    NSLog(@"%@", dict[@"name"]);
    
    NSDictionary *dict = @{@"name":@"lnj", @"age":@"30", @"height":@"1.75"};
    NSLog(@"%@ %@ %@", dict[@"name"], dict[@"age"], dict[@"height"]);

    3:如何对字典进行遍历?

     

    NSDictionary *dict = @{@"name":@"lnj", @"age":@"30", @"height":@"1.75"};
    
    //获取字典中key和value的个数, 在字典中key称之为键, value称之为值
    NSLog(@"count = %lu", [dict count]);

    方法一:老式for循环写法

    for (int i = 0; i < dict.count; ++i) {
        // 获取字典中所有的key
        NSArray *keys = [dict allKeys];
        // 取出当前位置对应的key
        //        NSLog(@"%@", keys[i]);
        NSString *key = keys[i];
        NSString *value = dict[key];
        NSLog(@"key = %@, value = %@", key, value);
    }

     

    方法二:增强for循环写法

    // 如何通过forin遍历字典, 会将所有的key赋值给前面的obj
    for (NSString *key in dict) {
        //        NSLog(@"%@", key);
        NSString *value = dict[key];
        NSLog(@"key = %@, value = %@", key, value);
    
    }

    方法三:OC字典的迭代器来遍历

    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"key = %@, value = %@", key, obj);
    }];

     

    4:如何对字典文件进行读写?

     1.将字典数据写入文件中

    NSDictionary *dict = @{@"name":@"lnj", @"age":@"30", @"height":@"1.75"};
    
    [dict writeToFile:@"/Users/xiaomage/Desktop/info.plist" atomically:YES];

    2.从文件中读取字典数据

    • 注意: 字典和数组不同, 字典中保存的数据是无序的
    NSDictionary *newDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/xiaomage/Desktop/info.plist"];
    NSLog(@"%@", newDict);
    
    NSArray *arr = @[@10, @20, @30, @5];
    [arr writeToFile:@"/Users/xiaomage/Desktop/abc.plist" atomically:YES];

    9.NSMutableDictionary

    如何对可变字典进行增删改查

    1:如何创建一个空的可变字典?

    NSMutableDictionary *dictM = [NSMutableDictionary dictionary];

     

    2:如何给可变字典添加键值对?

    [dictM setObject:@"lnj" forKey:@"name"];
    
    //简写:
    dictM[@"name"] = @"lnj";
    
    // 会将传入字典中所有的键值对取出来添加到dictM中
    [dictM setValuesForKeysWithDictionary:@{@"age":@"30", @"height":@"1.75"}];

    3:如何根据键,获取可变字典的值?

    NSLog(@"name = %@", dictM[@"name"]);

    4:如何删除可变字典键值对?

    [dictM removeObjectForKey:@"name"];
    [dictM removeObjectsForKeys:@[@"age", @"height"]];

    5:如何修改可变字典中的键值对?

    • 利用setObject方法给同名的key赋值, 那么新值会覆盖旧值
    [dictM setObject:@"88" forKey:@"age"];
    //简写:
    dictM[@"age"] = @"88";

     

    6:使用可变字典有什么注意事项?

    1.不能使用@{}来创建一个可变的字典

        NSMutableDictionary *dictM = @{@"name":@"lnj"};//编译就会报错
        [dictM setObject:@"30" forKey:@"age"];

     

    2.

    • 如果是不可变字典, 那么key不能相同
    • 如果是不可变字典出现了同名的key, 那么后面的key对应的值不会被保存
    • 如果是在可变数组中, 后面的会覆盖前面的
    NSDictionary *dict = @{@"name":@"lmj", @"name":@"lnj"};
    NSLog(@"dict = %@", dict);
    
    NSMutableDictionary *dictM = [NSMutableDictionary dictionaryWithObjects:@[@"lmj", @"lnj"] forKeys:@[@"name", @"name"]];
    NSLog(@"dict = %@", dictM);
  • 相关阅读:
    dhl:asp.net mvc 在View中获取Url参数的值
    Sql Server 中序号列的实现方法
    在LINQ中實踐多條件LEFT JOIN
    css div ul li 导航栏(横向):(纯CSS 多级菜单IE6能支持的)
    学习JQuery的$.Ready()与OnLoad $(window).load() 方法事件比较
    dhl:juery提示插件:jquery.Popup.js
    javascript中0级DOM和2级DOM事件模型浅析
    mvc:尽可能摆脱对HttpContext的依赖
    [备]ASP.net 中 OutputCache 指令各个参数的作用。
    dhl:我的jQuery代码:续...
  • 原文地址:https://www.cnblogs.com/dreamWanweidong/p/4998736.html
Copyright © 2011-2022 走看看