我的格式yyyyMMdd
格式为long
。我使用键 yyyyMMdd
和值 yyyyMM
(NSString
)创建了词典。我需要过滤NSDictionary
(通过 value
)并创建一个新表单。怎么做?
备注:我认为这是重复的,但我无法弄清楚如何做到这一点。
修改
我不明白为什么我的问题被标记为重复,问题解决我的问题是C#?
据我所知(我在Objective-C中的知识有限),语法是非常不同的。另外,我不知道Objective-C中的linq
或lambdas
。
答案 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];
}