2011-12-17 30 views
0

我有一個應用程序正在從plist中檢索其信息。 plist是帶有鍵(作者,貓,內容)的Dictionaries的數組。 現在我想在表格中顯示類別。 所以我需要所有獨特的類別條目以排序的方式。消除數組中的重複條目並對結果進行排序

我已成功實施以下方法,但如果這是「正確」解決方案,我很感興趣。

  1. 去通過的plist陣列中,並使新NSMutableArray與字典
  2. 的所有類別 條目把這個NSMutableArrayNSSet獲得獨特的元素
  3. 把這個NSSetNSArray有可能性排序它。
  4. 返回與分類NSArray

我覺得不是發起NSMutableArray,這是這樣做的正確方法。 有什麼建議可以做得更好?

非常感謝!

//InhaltefromWEb is a NSMutableArray 
-(NSArray*) getCategories { 
NSMutableArray* categorieTemp = [[NSMutableArray alloc] init]; 

unsigned count = [InhalteFromWeb count]; 
while (count--) { 
    NSString *tempString; 
    tempString=[[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY]; 
    NSLog(@"tempString %@", tempString); 
    [categorieTemp addObject:tempString]; 
} 

NSSet *uniqueElements = [NSSet setWithArray:categorieTemp]; 
NSLog(@"categories from engine %@", categorieTemp); 
NSArray* tempAr = [[[NSArray alloc] initWithArray:[uniqueElements allObjects]]sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

return [NSMutableArray arrayWithArray:tempAr]; 

} 
+1

是啊,沒關係。您可以在while循環中使用NSMutableSet而不是類別temp,並直接將字符串添加到它。 – carbonbasednerd 2011-12-17 16:21:00

+0

好提示:-)謝謝。我仍然失去了所有這些不同類型和可能性來存儲數據,然後重新轉換。 :-)但一步一步,它會更有意義...... – Ssernengreiferin 2011-12-17 16:45:06

+0

如果你還沒有,你還應該閱讀核心數據作爲數據存儲解決方案。 – carbonbasednerd 2011-12-17 16:53:18

回答

0

檢查現有的字符串[categorieTemp containsObject:tempString][categorieTemp sortUsingComparator:...]

實例對其進行排序:

[categorieTemp sortUsingComparator:^NSComparisonResult(id obj1, id obj2) 
{ 
    return [(NSString *)obj1 caseInsensitiveCompare:(NSString *)obj2]; 
}]; 
+0

嗨,我不明白containsObject應該如何幫助。我想列出一個具有獨特項目的清單(所有類別只有一次)。 – Ssernengreiferin 2011-12-17 16:35:35

+0

在添加到'categorieTemp'數組之前,您可以使用'[categorieTemp containsObject:tempString]'來檢查它是否已被添加。或者逐步檢查數組並檢查每個字符串與要添加的字符串。 – 2011-12-19 11:19:38

0

我做這個排序我陣列的日期:

[array sortedArrayUsingComparator: ^(id obj1, id obj2) { 
     NSDate *date1 = [obj1 objectForKey:@"datum"] == nil ? nilDate : [obj1 objectForKey:@"datum"]; 
     NSDate *date2 = [obj2 objectForKey:@"datum"] == nil ? nilDate : [obj2 objectForKey:@"datum"]; 
     return (NSComparisonResult)[date2 compare: date1]; 
    }];