NSDictionary

本文介绍了NSDictionary及NSMutableDictionary的基本操作,包括创建不可变字典与可变字典,并演示了如何进行添加、删除等常见操作。

NSDictionary字典相关代码如下:

不可变字典,以及添加不可变字典

    [[NSMutableArray array] addObject:[[NSDictionary alloc]initWithObjectsAndKeys:@"盖伦",@"name",@"gailun.jpg",@"pic", nil]];

可变字典,以及可变字典的添加、删除

        self.dicParam = [[NSMutableDictionary alloc] init];//初始化
        [self.dicParam setObject:self.spouseCell.textField.text forKey:@"spouseName"];//添加
        [self.dicParam removeObjectForKey:@"spouseName"];//删除


`NSDictionary` 是 Objective-C 中用于存储键值对(Key-Value)的集合类,类似于其他语言中的 **哈希表(Hash Table)** 或 **字典(Dictionary)**。它提供了一种快速查找、插入和删除数据的方式。 --- ### 📌 基本介绍 - `NSDictionary` 是不可变的,一旦创建后不能修改内容。 - 如果需要修改内容,可以使用它的子类 `NSMutableDictionary`。 - 每个键(Key)必须是唯一的,且通常是 `NSString` 或 `NSNumber` 类型。 - 值(Value)可以是任意对象类型(如 `NSString`, `NSNumber`, 自定义对象等)。 --- ### ✅ 示例代码 #### 不可变字典(NSDictionary) ```objective-c NSDictionary *dict = @{ @"name": @"Tom", @"age": @(25), @"score": @(90.5) }; NSString *name = dict[@"name"]; // 获取值 NSLog(@"Name: %@", name); ``` #### 可变字典(NSMutableDictionary) ```objective-c NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary]; [mutableDict setObject:@"Jerry" forKey:@"name"]; [mutableDict setObject:@30 forKey:@"age"]; // 修改值 [mutableDict setObject:@95 forKey:@"score"]; // 删除键值对 [mutableDict removeObjectForKey:@"age"]; ``` --- ### 🔍 特性与优点 | 特性 | 说明 | |------|------| | **快速查找** | 基于 Hash 表实现,查找效率为 O(1) | | **键唯一性** | Key 必须唯一,重复的 Key 会被覆盖 | | **支持任意对象作为值** | 可以存储字符串、数字、数组、自定义对象等 | | **线程不安全** | 多线程下需自行加锁或使用并发容器 | --- ### 🧠 使用场景 - 快速查找数据,如 ID 到对象的映射 - 存储配置信息(如 JSON 解析后的数据) - 作为缓存机制的一部分 - 替代大量 if-else 或 switch-case 判断逻辑 --- ### ⚠️ 注意事项 1. **Key 不能为 nil**,否则会抛出异常。 2. **Value 可以为 nil**,但建议使用 `[NSNull null]` 表示空值。 3. **Key 必须实现 `hash` 和 `isEqual:` 方法**,否则无法正确存储。 4. **不要使用基本类型作为 Key**,如 `int`、`long`,应使用 `NSNumber` 包装。 --- ### ✅ 示例:用 `NSDictionary` 优化查找性能 ```objective-c NSMutableDictionary<NSNumber *, DMSDNCategoryTraffics *> *categoryMap = [NSMutableDictionary dictionary]; for (DMSDNCategoryTraffics *item in self.categories.categoryTraffics) { categoryMap[@(item.familyId)] = item; } // 快速查找 DMSDNCategoryTraffics *match = categoryMap[@(category.familyId)]; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值