如何对NSD阵列的NSArray进行排序

时间:2013-04-25 21:39:51

标签: objective-c nsarray nsdictionary

我有一个NSArray的NSDictionaries,我想排序和删除重复。我遇到的问题是NSDictionary包含两个元素 startYear finishYear 所以我有一个字典值的NSArray,我想用startYear finishYear。

NSDictionary看起来像这样,它们都包含字符串值。

starYear
finishYear

两者中包含的值如下所示 -

(startYear / finishYear)
------------------------
(0 - 1999)
(1999 - 0)
(1999 - 2000)
(2001 - 2008)
(2000 - 2010)
(0 - 1999)
(0 - 2006)

应该是这样的 -

(startYear / finishYear)
------------------------
(0 - 1999)
(1999 - 0)
(1999 - 2000)
(0 - 2006)
(2000 - 2010)
(2001 - 2008)

如您所见,已删除任何重复值。 如果startYear为0,那么该值按finishYear排序。 如果startYear和finishYear可用,则将其分类到startYear,然后根据完成年份进行排序。

我完全不知道如何处理这个问题,我已经阅读了关于集等的内容。但我根本不知道如何根据NSDictionary中的两个元素进行排序。

我希望这是足够的信息来获得一些帮助,建议代码示例,让我解决这个问题将非常感激。

1 个答案:

答案 0 :(得分:2)

为此,您可以使用NSOrderedSet或NSArray。让我们假设一个数组,您可以使用比较器进行排序。像这样:

NSString const * kStartYear = @"startYear";
NSString const * kFinishYear = @"finishYear";

NSArray *unsortedArray = @[
                           @{kStartYear:@0,
                             kFinishYear:@1999},
                           @{@"startYear":@1999,
                             kFinishYear:@0},
                           @{kStartYear:@1999,
                             kFinishYear:@2000},
                           @{kStartYear:@2001,
                             kFinishYear:@2008},
                           @{kStartYear:@2000,
                             kFinishYear:@2010},
                           @{kStartYear:@0,
                             kFinishYear:@2006},
                           ];

NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDictionary *dictA = a;
    NSDictionary *dictB = b;

    NSNumber *startYear1 = dictA[kStartYear];
    NSNumber *startYear2 = dictB[kStartYear];
    return [startYear1 compare:startYear2];

    // Put in more logic for your comparison
}];


NSLog(@"sorted: %@", sortedArray);

更新:更正确的代码