【OC】NSDictionary和NSMutableDictionary

NSDictionary和NSMutableDictionary是Objective-C中用于存储键-值对的两个常用类。NSDictionary是不可变的字典类,一旦创建后,其内容无法被修改。NSMutableDictionary是可变的字典类,允许动态地添加、删除和修改键值对。
下面是一个示例代码,演示了它们的一些常见方法和功能:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 创建一个不可变字典
        NSDictionary *immutableDictionary = @{
            @"Name": @"John",
            @"Age": @30,
            @"City": @"New York"
        };
        NSLog(@"Immutable Dictionary: %@", immutableDictionary);

        // 获取字典中键值对的数量
        NSUInteger count = [immutableDictionary count];
        NSLog(@"Number of key-value pairs in Immutable Dictionary: %lu", (unsigned long)count);

        // 获取字典中的值
        NSString *name = [immutableDictionary objectForKey:@"Name"];
        NSLog(@"Name: %@", name);

        // 检查字典中是否包含某个键
        if ([immutableDictionary objectForKey:@"Country"]) {
            NSLog(@"Country key exists in Immutable Dictionary");
        } else {
            NSLog(@"Country key does not exist in Immutable Dictionary");
        }

        // 创建一个可变字典
        NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:immutableDictionary];
        NSLog(@"Mutable Dictionary: %@", mutableDictionary);

        // 添加键值对到可变字典
        [mutableDictionary setObject:@"USA" forKey:@"Country"];
        NSLog(@"Updated Mutable Dictionary: %@", mutableDictionary);

        // 移除键值对
        [mutableDictionary removeObjectForKey:@"Age"];
        NSLog(@"Updated Mutable Dictionary (after removing Age): %@", mutableDictionary);

        // 替换键值对的值
        [mutableDictionary setObject:@35 forKey:@"Age"];
        NSLog(@"Updated Mutable Dictionary (after replacing Age): %@", mutableDictionary);

        // 清空可变字典
        [mutableDictionary removeAllObjects];
        NSLog(@"Emptied Mutable Dictionary: %@", mutableDictionary);
    }
    return 0;
}

这段代码演示了如何创建、操作和处理NSDictionary和NSMutableDictionary的对象。不可变字典一旦创建后无法更改,而可变字典可以进行各种修改操作。这些字典类提供了丰富的方法,以满足不同的字典操作需求。现在让我解释代码中使用的关键方法和功能:

  1. 不可变字典 (NSDictionary):

    • 创建不可变字典:使用@{@"key1": value1, @"key2": value2}[NSDictionary dictionaryWithObjectsAndKeys:value1, @"key1", value2, @"key2", nil]
    • 获取字典中键值对的数量:使用[dictionary count]
    • 获取字典中的值:使用[dictionary objectForKey:@"key"]
    • 检查字典中是否包含键:使用[dictionary objectForKey:@"key"],并检查返回值是否为nil
  2. 可变字典 (NSMutableDictionary):

    • 创建可变字典:使用[NSMutableDictionary dictionaryWithDictionary:immutableDictionary]
    • 添加键值对:使用[mutableDictionary setObject:value forKey:@"key"]
    • 移除键值对:使用[mutableDictionary removeObjectForKey:@"key"]
    • 替换键值对的值:使用[mutableDictionary setObject:newValue forKey:@"key"]
    • 清空可变字典:使用[mutableDictionary removeAllObjects]

当处理NSDictionaryNSMutableDictionary时,还有一些其他常用方法和知识点,以下是一些示例,以及相应的代码解释:

  1. 遍历字典:

    • 使用快速枚举(Fast Enumeration)来遍历字典,这是一种简便的方式,例如:
    for (NSString *key in dictionary) {
        id value = [dictionary objectForKey:key];
        NSLog(@"Key: %@, Value: %@", key, value);
    }
    
  2. 获取所有键和值:

    • 使用allKeysallValues方法来分别获取字典中的所有键和所有值。
  3. 判断字典是否为空:

    • 使用isEmpty方法,检查字典是否为空,即不包含任何键值对。
  4. 合并字典:

    • 使用addEntriesFromDictionary:方法将一个字典的内容添加到另一个字典中,从而实现字典的合并。
  5. NSDictionary的初始化方法:

    • 除了使用字面量和工厂方法创建字典之外,还可以使用- (instancetype)initWithObjectsAndKeys:(id)firstObject, ...等初始化方法来创建字典。
  6. 不同数据类型的键和值:

    • NSDictionaryNSMutableDictionary可以包含不同类型的键和值,但最好保持键和值的类型一致,以便更容易处理。
  7. 字典中的nil值:

    • NSDictionaryNSMutableDictionary可以包含nil值,但需要小心处理nil值的情况。

下面是一个扩展示例,包括遍历、获取所有键和值、判断字典是否为空、合并字典的功能:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 创建一个不可变字典
        NSDictionary *immutableDictionary = @{
            @"Name": @"John",
            @"Age": @30,
            @"City": @"New York"
        };
        NSLog(@"Immutable Dictionary: %@", immutableDictionary);

        // 遍历字典
        for (NSString *key in immutableDictionary) {
            id value = [immutableDictionary objectForKey:key];
            NSLog(@"Key: %@, Value: %@", key, value);
        }

        // 获取所有键和值
        NSArray *allKeys = [immutableDictionary allKeys];
        NSArray *allValues = [immutableDictionary allValues];
        NSLog(@"All Keys: %@", allKeys);
        NSLog(@"All Values: %@", allValues);

        // 判断字典是否为空
        if ([immutableDictionary count] == 0) {
            NSLog(@"Immutable Dictionary is empty.");
        } else {
            NSLog(@"Immutable Dictionary is not empty.");
        }

        // 合并字典
        NSDictionary *extraData = @{
            @"Country": @"USA",
            @"Gender": @"Male"
        };
        NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:immutableDictionary];
        [mutableDictionary addEntriesFromDictionary:extraData];
        NSLog(@"Merged Mutable Dictionary: %@", mutableDictionary);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值