NSDictionary细说(八)—— 字典的过滤和存储

本文介绍了Objective-C中字典的几种高级操作方法,包括通过条件筛选键、将字典内容写入文件或URL等,并提供了详细的代码示例。

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

转载自:https://www.jianshu.com/p/e442d6d70d50

一、- (NSSet<KeyType> *)keysOfEntriesPassingTest:(BOOL (^)(KeyType key, ObjectType obj, BOOL *stop))predicate;

该方法的作用是:返回一组键,它的对应的值满足block块。

下面看一下返回值:返回一组keykey对应的值满足predicate

下面看一下示例代码

 

- (void)demoKeysOfEntriesPassingTest
{
    NSDictionary *dict = @{@"One" : @1, @"Two" : @2, @"Three" : @3};
    NSSet *set = [dict keysOfEntriesPassingTest:^BOOL(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        if ([key isEqualToString:@"Two"]) {
            return NO;
        }
        return YES;
    }];
    NSLog(@"set = %@", set);
}

看一下返回值

 

2017-08-28 15:30:02.171050+0800 JJOC[839:500822] set = {(
    One,
    Three
)}

结论:根据条件进行键的过滤。


二、- (NSSet<KeyType> *)keysOfEntriesWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(KeyType key, ObjectType obj, BOOL *stop))predicate;

该方法的作用就是:和方法一是类似的都是返回一组key键,这个键满足的是block里面的条件。

下面看一下参数和返回值:

  • opts:枚举选项的一个掩码。
  • predicate:指定字典中值的约束的块对象。
  • return:一组键值满足predicate条件。

下面我们就看示例代码

 

- (void)demoKeysOfEntriesWithOptions
{
    NSDictionary *dict = @{@"One" : @1, @"Two" : @2, @"Three" : @3};
    NSSet *set = [dict keysOfEntriesWithOptions:NSEnumerationReverse passingTest:^BOOL(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        if ([key isEqualToString:@"Two"]) {
            return NO;
        }
        return YES;
    }];
    NSLog(@"set = %@", set);
}

看输出结果

 

2017-08-28 15:36:31.637780+0800 JJOC[842:501588] set = {(
    One,
    Three
)}

结论:没有枚举选项的过滤器。


三、- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

该方法的作用是:将字典内容的属性列表表示写入给定的路径。

下面看一下参数和返回值:

  • path:写入文件的路径。如果路径包含波形符(〜)字符,则在调用此方法之前必须使用stringByExpandingTildeInPath进行扩展。
  • useAuxiliaryFile:一个指定文件是否应该被原子地写入的标志。如果标志为YES,则将字典写入辅助文件,然后将辅助文件重命名为路径。 如果标志为NO,则字典直接写入路径。 YES选项保证路径(如果存在)将不会被破坏,即使系统在写入时应该崩溃。
  • return:成功YES失败NO。

还要注意:

  • 此方法递归地验证所有包含的对象是否是在写出文件之前的属性列表对象(NSData,NSDate,NSNumber,NSString,NSArray 或 NSDictionary的实例),如果所有对象不是属性列表对象,则返回否,因为 结果文件不会是有效的属性列表。
  • 如果字典的内容都是属性列表对象,则该方法编写的文件可用于使用类方法dictionaryWithContentsOfFile或实例方法initWithContentsOfFile初始化新字典。
  • 如果您需要更好地控制属性列表表示,请改用NSPropertyListSerialization

下面看示例代码

 

- (void)demoWriteToFile
{
    NSArray *dict = @[@"6", @"9", @"2", @"1"];
    BOOL result = [dict writeToFile:@"/Users/hrl/Desktop/1.txt" atomically:NO];
    NSLog(@"result = %d", result);
}

下面看输出结果

 

2017-08-28 16:08:25.280734+0800 JJOC[867:506373] result = 0

结论:将字典写入文件。


四、- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

该方法的作用就是:将字典内容的属性列表表示写入给定的URL。

下面看一下参数和返回值:

  • url:字典写入的地址。
  • atomically:如果标志为YES,则将字典写入辅助位置,然后将辅助位置重命名为aURL。 如果标志为NO,则将字典直接写入aURL。 YES选项确保aURL(如果存在)将不会损坏,即使系统在写入过程中崩溃。 如果aURL是不能被原子写入的类型,标志将被忽略。
  • return:成功YES失败NO。

还要注意:

  • 此方法递归地验证所有包含的对象是否是在写出文件之前的属性列表对象(NSData,NSDate,NSNumber,NSString,NSArray或NSDictionary的实例),如果所有对象不是属性列表对象,则返回否,因为 结果输出不会是有效的属性列表。
  • 如果字典的内容都是属性列表对象,则该方法写入的位置可用于使用类方法dictionaryWithContentsOfURL或实例方法initWithContentsOfURL初始化新字典。
  • 如果您需要更好地控制属性列表表示,请改用NSPropertyListSerialization

结论:将字典写入URL。



作者:刀客传奇
链接:https://www.jianshu.com/p/e442d6d70d50
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值