【发布时间】:2012-03-30 16:36:16
【问题描述】:
我正在尝试使用自定义的字母顺序对 NSArray 进行排序。交易是我有一个包含对象状态的字符串数组。
可用状态为entered, process, ready, done。
现在,当我正常对它们进行排序(按字母顺序)时,顺序会不正确(完成、输入、处理、准备好)。
我尝试了以下代码以正确的方式对其进行排序:
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"state" ascending:YES comparator:^(id obj1, id obj2) {
if ([obj1 isEqualToString:@"entered"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"entered"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"done"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"done"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else {
return (NSComparisonResult) NSOrderedSame;
}
}];
我也尝试只使用单词的第一个字母,但也没有用。
当我使用这个比较器时,它只是不订购。数组保持“旧”顺序。
我吃错了什么?我不是理解排序比较器吗?
感谢您的帮助,亲切的问候,朱利安
【问题讨论】:
标签: nsmutablearray nsarray sql-order-by comparator nssortdescriptor