【发布时间】:2013-08-02 12:59:58
【问题描述】:
所以我有一个自定义“元素”对象数组(嘿,有原子序数、化学符号、原子质量等...),我无法按它们的一个属性对它们进行排序;
代码如下:
switch (sortDescriptor) {
case 0: {
//Sort the array by "ATOMIC NUMBER"
NSArray *sortedArray = [self.elementsArray sortedArrayUsingComparator:^(id a, id b) {
NSNumber *first = @([(SAMElement *)a atomicNumber]);
NSNumber *second = @([(SAMElement *)b atomicNumber]);
return [first compare:second];
}];
self.elementsArray = [sortedArray mutableCopy];
}
case 1: {
//Sort the array by "ELEMENT NAME"
NSArray *sortedArray = [self.elementsArray sortedArrayUsingComparator:^(id a, id b) {
NSString *first = [(SAMElement *)a elementName];
NSString *second = [(SAMElement *)b elementName];
return [first compare:second];
}];
self.elementsArray = [sortedArray mutableCopy];
}
case 2:{
NSLog(@"sorting by chemical symbol");
//Sort the array by "CHEMICAL SYMBOL"
NSArray *sortedArray = [self.elementsArray sortedArrayUsingComparator:^(id a, id b) {
NSString *first = [(SAMElement *)a chemichalSymbol];
NSString *second = [(SAMElement *)b chemichalSymbol];
return [first compare:second];
}];
self.elementsArray = [sortedArray mutableCopy];
}
case 3: {
//Sort the array by "ATOMIC MASS"
NSArray *sortedArray = [self.elementsArray sortedArrayUsingComparator:^(id a, id b) {
NSNumber *first = [(SAMElement *)a atomicMass];
NSNumber *second = [(SAMElement *)b atomicMass];
return [first compare:second];
}];
self.elementsArray = [sortedArray mutableCopy];
}
default:
break;
}
当是排序它返回一个完全随机的元素列表。我是不是做错了什么?
【问题讨论】:
-
您是否调试过代码来验证“first”和“second”属性的值?
-
您是否故意在 case 块后遗漏了
break;,以便例如当sortDescriptor==2数组首先按化学符号排序,然后再按原子质量排序? -
任何答案对您有用吗?如果是,请接受一个,以便从未回答中删除您的问题。如果没有,请提供一些新信息反馈。
标签: ios objective-c arrays sorting