2013-02-18 54 views
0

我有NSArrayNSDictionaries。 每個字典都有一個BOOL值的關鍵字。用NSDictionaries整理NSArray爲2 NSArrays

我需要排序整個數組,結果應該是2 NSArrays:一個字典的值爲0,另一個字典的值爲1。

這樣做的最好方法是什麼?

+0

我不知道你在0值和1個值的意思。你能解釋一下嗎? – ThomasW 2013-02-18 10:15:50

+0

我推測這意味着NO = 0,YES = 1 – iain 2013-02-18 10:17:02

+0

當然。我會把它分層。 NSArray> NSDictionary> Key的值可以是0或1.換句話說,一個BOOL值。因此,將該值設置爲0的字典應該轉到一個數組,而值爲1的字典應該轉到另一個數組。 – 2013-02-18 10:17:42

回答

2

不知道如果這是你的意思,但:

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"。 此外,它採用了全新的字典訪問語法

+0

'dict [@「key」]'等於這個'[dict objectForKey @'鍵']'? – 2013-02-18 10:20:29

+0

是的,這是新的語法 – iain 2013-02-18 10:21:42

+0

在這種情況下,我認爲它應該做我需要的。我現在就試試 – 2013-02-18 10:24:43

1

我認爲「最好」的方法是使用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]; 
+0

當然,對於這種微不足道的事情來說這有點矯枉過正,並且會爲系統做更多的工作? – iain 2013-02-18 10:24:13

+1

小修正:第一種格式(用於鍵)必須是'%K',而不是'%@'。 – 2013-02-18 10:29:14

+0

嗨tkanzakic,謝謝你的回覆。然而我發現iain的答案更容易理解我目前的目標-c級別(這只是n00b以上:)) – 2013-02-18 10:29:16