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

时间:2015-06-07 17:42:00

标签: ios objective-c nsdictionary filtering

我的格式yyyyMMdd格式为long。我使用 yyyyMMdd yyyyMMNSString)创建了词典。我需要过滤NSDictionary(通过 value )并创建一个新表单。怎么做?

备注:我认为这是重复的,但我无法弄清楚如何做到这一点。

修改 我不明白为什么我的问题被标记为重复,问题解决我的问题是C#? 据我所知(我在Objective-C中的知识有限),语法是非常不同的。另外,我不知道Objective-C中的linqlambdas

3 个答案:

答案 0 :(得分:5)

有很多方法可以做到这一点(包括你认为是noobish的方法)。这是一个:

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实现的,该方法专门处理这些键。对于你描述的情况无关紧要。

答案 1 :(得分:0)

所以我仍然不能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的东西放回字典中,但我不知道你的结果应该如何。

答案 2 :(得分:0)

 //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];
}