2011-12-17 28 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]; 
    }];