这让我感动不已,我无法拼凑出如何做到这一点。在NSArray中排序数字?
我从plist中获取我的数组,这个数组充满了数字(如在plist中设置的)。现在我需要做的就是对它们进行排序,使它们下降,但是我无法解决它。
希望有人能帮忙,谢谢。
这让我感动不已,我无法拼凑出如何做到这一点。在NSArray中排序数字?
我从plist中获取我的数组,这个数组充满了数字(如在plist中设置的)。现在我需要做的就是对它们进行排序,使它们下降,但是我无法解决它。
希望有人能帮忙,谢谢。
尝试这个代码?
NSArray *array = /* loaded from file */;
array = [array sortedArrayUsingSelector: @selector(compare:)];
以下将依次递增的数字进行排序,然后反向结果给降序排列的数字:
NSArray *sorted = [[[array sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];
此之前的问题有其他一些备选方案: Sort an NSArray in Descending Order
它适用于我:
NSSortDescriptor *sortIdClient =
[NSSortDescriptor sortDescriptorWithKey:@"campaignValue"
ascending:NO
comparator: ^(id obj1, id obj2){
return [obj1 compare:obj2 options:NSNumericSearch];
}];
NSArray *sortDescriptors = @[sortIdClient];
NSArray *arrTemp = [self.allCampaignsList sortedArrayUsingDescriptors:sortDescriptors];
这是使用比较块的许多方法之一。此代码片段适用于任何需要排序数字的数组。 对于升序:
AscendingArray = [UnsortArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
降序排序:
DescendingArray = [UnsortArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
return (NSComparisonResult)NSOrderedSame;
}];
为什么不只是使用NSNumber'比较:'? – vikingosegundo
这样便解决了问题:
NSArray *array = /* loaded from file */;
array = [array sortedArrayUsingSelector: @selector(compare:)];
请删除使文本显示为代码的额外缩进 – YakovL
但你会选择方法的内容是什么?这是让我感到满意的。 –
哪种选择器方法? –
为'NSNumber'实例定义了'-compare:'方法:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html#// apple_ref/occ/instm/NSNumber/compare: –