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

版本记录

版本号 时间
V1.0 2017.08.28

前言

NSDictionary是不可变字典,它的不可变性可以参考NSArray数组,但是它与数组还是有很大不同,尽管他们都属于集合类,下面这几篇我们继续来将一下基础类的知识。还是老规矩从整体到局部,从浅入深进行讲解,谢谢大家。感兴趣的可以参考我上面几篇。
1. NSDictionary细说(一)—— 整体了解
2. NSDictionary细说(二)—— 字典的创建
3. NSDictionary细说(三)—— 字典的初始化
4. NSDictionary细说(四)—— 共享键集、数量以及相等比较
5. NSDictionary细说(五)—— 键和值的获取
6. NSDictionary细说(六)—— 字典的遍历
7. NSDictionary细说(七)—— 字典的排序

一、- (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。

后记

未完,待续~~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容