我有NSArray
和NSDictionaries
。 每個字典都有一個BOOL值的關鍵字。用NSDictionaries整理NSArray爲2 NSArrays
我需要排序整個數組,結果應該是2 NSArrays
:一個字典的值爲0,另一個字典的值爲1。
這樣做的最好方法是什麼?
我有NSArray
和NSDictionaries
。 每個字典都有一個BOOL值的關鍵字。用NSDictionaries整理NSArray爲2 NSArrays
我需要排序整個數組,結果應該是2 NSArrays
:一個字典的值爲0,另一個字典的值爲1。
這樣做的最好方法是什麼?
不知道如果這是你的意思,但:
NSMutableArray *yesDicts = [NSMutableArray array];
NSMutableArray *noDicts = [NSMutableArray array];
for (NSDictionary *dict in array) {
NSNumber *yesorno = dict[@"key"];
if ([yesorno boolValue] == YES) {
[yesDicts addObject:dict];
} else {
[noDicts addObject:dict];
}
}
其中array
是初始陣列,並且在每個字典的BOOL值存儲在@"key"
。 此外,它採用了全新的字典訪問語法
'dict [@「key」]'等於這個'[dict objectForKey @'鍵']'? – 2013-02-18 10:20:29
是的,這是新的語法 – iain 2013-02-18 10:21:42
在這種情況下,我認爲它應該做我需要的。我現在就試試 – 2013-02-18 10:24:43
我認爲「最好」的方法是使用NSPredicates
,例如:
NSPredicate *yesPredicate = [NSPredicate predicateWithFormat:@"%K == %@", @"key", [NSNumber numberWithBool:YES]];
NSArray *filteredYESResults = [allResultsArray filteredArrayUsingPredicate:yesPredicate];
NSPredicate *noPredicate = [NSPredicate predicateWithFormat:@"%K == %@", @"key", [NSNumber numberWithBool:NO]];
NSArray *filteredNOResults = [allResultsArray filteredArrayUsingPredicate:noPredicate];
當然,對於這種微不足道的事情來說這有點矯枉過正,並且會爲系統做更多的工作? – iain 2013-02-18 10:24:13
小修正:第一種格式(用於鍵)必須是'%K',而不是'%@'。 – 2013-02-18 10:29:14
嗨tkanzakic,謝謝你的回覆。然而我發現iain的答案更容易理解我目前的目標-c級別(這只是n00b以上:)) – 2013-02-18 10:29:16
我不知道你在0值和1個值的意思。你能解釋一下嗎? – ThomasW 2013-02-18 10:15:50
我推測這意味着NO = 0,YES = 1 – iain 2013-02-18 10:17:02
當然。我會把它分層。 NSArray> NSDictionary> Key的值可以是0或1.換句話說,一個BOOL值。因此,將該值設置爲0的字典應該轉到一個數組,而值爲1的字典應該轉到另一個數組。 – 2013-02-18 10:17:42