Objective-C:得到一个错误的输出,我不知道为什么当我对 NSMutableSet 进行排序时
Objective-C:Get a Wrong Output and I don't Why when I sort NSMutableSet
我正在对 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)?
有人知道答案吗?
我认为这是因为您使用的是字符串而不是数字。对字符串进行排序时,10 在 8 之前,因为它以 1 开头。
您正在使用 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]];
我正在对 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)?
有人知道答案吗?
我认为这是因为您使用的是字符串而不是数字。对字符串进行排序时,10 在 8 之前,因为它以 1 开头。
您正在使用 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]];