【iOS 开发学习总结-OC-31】★★OC之foundation 框架——字典(NSDictionary 与 NSMutableDictionary)

本文详细介绍了Objective-C中Foundation框架的NSDictionary和NSMutableDictionary的使用,包括创建方法、访问元素、字典排序、过滤、自定义类作为key以及对字典的操作。通过示例代码展示了各种功能的实现,帮助读者深入理解这两种数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSDictionary用于保存具有映射关系的数据。NSDictionary集合保存了2组值——一组存 key, 一组存 value。

value与 key 都可以是任何引用类型的数据。Map 的 key 不允许重复。value与 key存在但相向一对一的关系。一个 key 对应唯一的一个 value.

NSDictionary的功能与用法

NSDictionary的创建同样有类方法和实例方法。以 dictionary 开头的是类方法,以 init 开头的是实例方法。

创建NSDictionary对象的几类常见方法:

创建NSDictionary对象的几类常见方法: 
1. dictionary:——创建一个不包含任何 key-value 对的NSDictionary 
2. dictionaryWithContentsOfFile:/initWithContentsOfFile:——读取指定文件的内容来初始化NSDictionary(该文件通常是由NSDictionary自己输出生成) 
3. dictionaryWithDictionary:/initWithDictionary:——用已有的包含 key-value 对 来初始化NSDictionary对象 
4. dictionaryWithObject: forKey:——用单个key-value 对 创建NSDictionary对象 
5. dictionaryWithObjects:<#(nonnull NSArray *)#> forKeys:<#(nonnull NSArray<id<NSCopying>> *)#>——使用2个NSArray分别指定 key,value 集合,可以创建多组key-value 对的NSDictionary。 
6. dictionaryWithObjectsAndKeys:——按 value1,key1,value2,key2,……nil 的格式传入多个键值对。

得到NSDictionary对象后,如何访问该集合包含的 key 或 value 呢?

得到NSDictionary对象后,如何访问该集合包含的 key 或 value 呢? 
1.  count:——返回NSDictionary包含的键值对的数量 
2.  allKeys:——返回NSDictionary包含的全部 key. 
3.  allKeysForObject:——返回指定 value 对应的所有 key 
4.  allValues:——返回NSDictionary包含的全部 value 
5.  objectForKey:——获取该NSDictionary中指定 key 对应的 value 
6. objectForKeyedSubscript:——通过该方法,允许NSDictionary通过下标法来获取指定 key 对应的 value 
7.  valueForKey:——获取该NSDictionary中指定 key 对应的 value 
8.  keyEnumerator:——返回用于遍历该NSDictionary所有key 的 NSEnumerator对象。 
9.  objectEnumerator:————返回用于遍历该NSDictionary所有value 的 NSEnumerator对象。 
10.  enumerateKeysAndObjectsUsingBlock:——使用代码块,来迭代执行该集合中所有的 键值对。 
11.  enumerateKeysAndObjectsWithOptions:<#(NSEnumerationOptions)#> usingBlock:————使用代码块,来迭代执行该集合中所有的 键值对,该方法可以传入一个额外得到 option参数 
12.  writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#> 
——将该字典对象的数据写入指定文件。

示例代码: 
FKUser.h

#import <Foundation/Foundation.h>

@interface FKUser : NSObject
@property (nonatomic , copy) NSString* name;
@property (nonatomic , copy) NSString* pass;
- (id) initWithName:(NSString*) aName
    pass:(NSString*) aPass;
- (void) say:(NSString*) content;
@end

FKUser.m

#import "FKUser.h"

@implementation FKUser
@synthesize name;
@synthesize pass;
- (id) initWithName:(NSString*) aName
    pass:(NSString*) aPass
{
    if(self = [super init])
    {
        name = aName;
        pass = aPass;
    }
    return self;
}
- (void) say:(NSString*) content
{
    NSLog(@"%@说:%@",self.name , content);
}
// 会重写isEqual:方法,重写该方法的比较标准是,
// 如果两个FKUser的name、pass相等,即可认为两个FKUser相等。
- (BOOL) isEqual:(id)other
{
    if(self == other)
    {
        return YES;
    }
    if([other class] == FKUser.class)
    {
        FKUser* target = (FKUser*)other;
        return [self.name isEqualToString:target.name]
            && [self.pass isEqualToString:target.pass];
    }
    return NO;
}
// 会重写isEqual:方法,重写该方法的比较标准是,
// 如果两个FKUser的name、pass相等,即可认为两个FKUser相等。
- (NSUInteger) hash
{
    NSUInteger nameHash = name == nil ? 0 : [name hash];
    NSUInteger passHash = pass == nil ? 0 : [pass hash];
    return nameHash * 31 + passHash;


}
// 重写description方法,可以直接看到FKUser对象的状态
- (NSString*) description
{
    return [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值