// // NSDictionary+JKBlock.m // JKCategories (https://github.com/shaojiankui/JKCategories) // // Created by Jakey on 15/5/22. // Copyright (c) 2015年 www.skyfox.org. All rights reserved. // #import "NSDictionary+JKBlock.h" @implementation NSDictionary (JKBlock) #pragma mark - RX - (void)jk_each:(void (^)(id k, id v))block { [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { block(key, obj); }]; } - (void)jk_eachKey:(void (^)(id k))block { [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { block(key); }]; } - (void)jk_eachValue:(void (^)(id v))block { [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { block(obj); }]; } - (NSArray *)jk_map:(id (^)(id key, id value))block { NSMutableArray *array = [NSMutableArray array]; [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { id object = block(key, obj); if (object) { [array addObject:object]; } }]; return array; } - (NSDictionary *)jk_pick:(NSArray *)keys { NSMutableDictionary *picked = [[NSMutableDictionary alloc] initWithCapacity:keys.count]; [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { if ([keys containsObject:key]) { picked[key] = obj; } }]; return picked; } - (NSDictionary *)jk_omit:(NSArray *)keys { NSMutableDictionary *omitted = [[NSMutableDictionary alloc] initWithCapacity:([self allKeys].count - keys.count)]; [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { if (![keys containsObject:key]) { omitted[key] = obj; } }]; return omitted; } - (BOOL)jk_hasKey:(NSString *)key { return [self objectForKey:key] != nil; } @end