如何按值过滤 NSDictionary 并从中创建新的 NSDictionary?

How to filter NSDictionary by value and create new NSDictionary from that?

我有一个日期列表,格式为 yyyyMMdd long。我用 key yyyyMMddvalue yyyyMM (如 NSString)创建了字典。我需要过滤 NSDictionary(通过 value)并创建一个新的表单。怎么做?

备注:我想这是重复的,但我不知道该怎么做。

编辑: 我不明白为什么我的问题被标记为 duplicate 问题解决我的问题是 C#? 据我所知(我对 objective-C 的了解有限)语法非常不同。我也不知道 objective-C 中的 linqlambdas

有多种方法可以做到这一点(包括您认为笨拙的方法)。这是一个:

NSArray* keys = [dict keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop){
    // return YES or NO depending on whether the value (in "obj") passes your test
}];
NSDictionary* newDict = [dict dictionaryWithValuesForKeys:keys];

请注意,-dictionaryWithValuesForKeys: 在应用于字典时,可能会对以“@”开头的键执行一些意想不到的操作。那是因为它是根据 -valueForKey: 实现的,并且 NSDictionary 对该方法的实现特别对待这些键。对于您描述的情况应该无关紧要。

所以我仍然不能 100% 确定您想做什么,以及为什么要这样做。

但是看看这个:

// create a new dict for this example, you can just use ur existing one
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"201506", @"20150601",
                                                                  @"201505", @"20150501", nil];

NSArray *resultArray = [[dict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF == %@", @"201506"]];

// testing the output
NSLog(@"%@", resultArray);

你最终没有字典,而是一个数组,其中包含你从字典中过滤的值。也许您必须根据需要调整谓词并将 resultArray 内容放回字典中,但我不知道您的结果应该是什么样子。

 //old dictionary stores @{date: string} ,where data = NSDate; string = NSString from NSDate
 NSMutableArray * storedValues = [[oldDictionary allValues]mutableCopy];
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF > %@",[NSDate date]];
 NSArray *sortedArray = [storedValues filteredArrayUsingPredicate:predicate];


  NSMutableDictionary *newDictionary = [NSMutableDictionary dictionary];
  for(NSDate *date in sortedArray) {
      NSArray *keys = [oldDictionary allKeysForObject:date];
      NSString *key = keys.firstObject;
     [newDictionary setObject:date forKey:key];
}