1

我有一个 NSArray 的 NSDictionaries,我想从中排序和删除重复项。我遇到的问题是 NSDictionary 包含两个元素startYearfinishYear所以我有一个字典值的 NSArray,我想使用 startYearfinishYear 进行排序。

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 中的两个元素进行排序。

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

4

1 回答 1

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);

更新:更正确的代码

于 2013-04-25T21:51:27.510 回答