0

我正在对 nsmutableSet 进行排序,但遇到了一个奇怪的问题。

   NSArray *data = @[@[@"1",@"2",@"3"],
                   @[@"2",@"3",@"4",@"5",@"6"],
                   @[@"8",@"9",@"10"],
                   @[@"15",@"16",@"17",@"18"]];

NSArray *sortArr = [[NSArray alloc] init];
NSMutableArray *Data = [[NSMutableArray alloc] init];

NSMutableSet *interSection = [[NSMutableSet alloc] init];
interSection = [NSMutableSet setWithArray:[data objectAtIndex:0]];

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES ];

for (int i =1; i < 4; i ++) {
    if ([interSection intersectsSet:[NSSet setWithArray:[data objectAtIndex:i]]]) {
        [interSection unionSet:[NSSet setWithArray:[data objectAtIndex:i]]];
    }
    else{

        sortArr = [interSection sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
        [Data addObject:sortArr];
        interSection = [NSMutableSet setWithArray:[data objectAtIndex:i]];

    }
}

if ([interSection count] != 0) {

    sortArr = [interSection sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
    [Data addObject:sortArr];
}
NSLog(@"%@",Data);

但输出是:(1、2、3、4、5、6)、(10、8、9)、(15、16、17、18))

为什么是 (10,8,9) 但 (8,9,10) ?

有人知道答案吗?

4

2 回答 2

0

您正在使用NSSortDescriptor字符串,因此它以字符串方式(8> 10、9> 10)排序。你应该像这样创建一个自定义NSSortDescriptor

NSSortDescriptor * sort = [NSSortDescriptor sortDescriptorWithKey:@"sort" ascending:YES comparator:^(id obj1, id obj2) {

    if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];
sortArr = [[data objectAtIndex:i] sortedArrayUsingDescriptors:[NSArray arrayWithObject: sort]];
于 2015-09-10T02:06:25.607 回答
0

我认为这是因为您使用的是字符串而不是数字。排序字符串时,10 在 8 之前,因为它以 1 开头。

于 2015-09-10T01:25:42.420 回答