消除数组中的双重条目并对结果进行排序

时间:2011-12-17 15:56:00

标签: iphone objective-c ios sorting nsmutablearray

我有一个从plist中检索其信息的应用程序。 plist是带有键(作者,猫,内容)的Dictionaries数组。 现在我想在表格中显示类别。 所以我需要以排序的方式输入所有唯一的类别条目。

我已成功实施以下方式,但我感兴趣的是这是“正确”的解决方案。

  1. 浏览plist数组并使用所有类别创建新的NSMutableArray 词典的条目
  2. 将此NSMutableArray放入NSSet以获取唯一元素
  3. 将此NSSet放入NSArray,以便对其进行排序。
  4. 返回使用已排序的NSMutableArray
  5. 启动的NSArray

    我觉得不是,这是这样做的正确方法。 有什么建议可以做得更好吗?

    非常感谢!

    //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];
    
    }
    

2 个答案:

答案 0 :(得分:0)

检查包含[categorieTemp containsObject:tempString]的现有字符串,并使用[categorieTemp sortUsingComparator:...]

对其进行排序

示例:

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

答案 1 :(得分: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];
    }];