我有一个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中的两个元素进行排序。
我希望这是足够的信息来获得一些帮助,建议代码示例,让我解决这个问题将非常感激。
答案 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);
更新:更正确的代码