我有一个包含0、3、2、8等值的数组。我想按升序对数组进行排序。请告诉我如何做到。
提前感谢!
提前感谢!
如果你的数组是一个包含NSNumbers的NSArray:
NSArray *numbers = [NSArray arrayWithObjects:
[NSNumber numberWithInt:0],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:8],
nil];
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES selector:@selector(localizedCompare:)];
NSArray *sortedNumbers = [numbers sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
需要记住的是,这只是对NSArray进行排序的一种方法。
还有其他几种对NSArray进行操作的方法,例如:
如果您的数组是包含int的c int数组:
#include <stdio.h>
#include <stdlib.h>
int array[] = { 0, 3, 2, 8 };
int sort(const void *x, const void *y) {
return (*(int*)x - *(int*)y);
}
void main() {
qsort(array, 10, sizeof(int), sort);
}
NSNumber
,那么您不需要一个排序描述符。如果它被命名为array
,那么:[array sortedArrayUsingSelector:@selector(compare:)];
将返回一个按升序排列的新数组,正如您所希望的那样。
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:nil
ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [**YourArray** sortedArrayUsingDescriptors:sortDescriptors];
使用以下代码:[[myData allKeys]sortedArrayUsingSelector:@selector(psuedoNumericCompare:)]
;
myData是您的数组。如果您在代码中使用该行,它将按整数大小排序(而不是按字母顺序排序,因此它不会像1, 111, 2,322, 333, 4445, 45, 67
这样排序,而是像1, 2, 45, 67, 111, 322, 333, 4445
)。
试试这个。如果你有一个名为 intArr 的数组,像这样 {1,10.11,12,2,23}
NSArray *array = [intArr copy];
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
if ([obj1 integerValue] == 0 && [obj2 integerValue] == 0)
{
return (NSComparisonResult)NSOrderedSame;
}
if ([obj1 integerValue] == 0)
{
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj2 integerValue] == 0)
{
return (NSComparisonResult)NSOrderedAscending;
}
if ([obj1 integerValue] > [obj2 integerValue])
{
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue])
{
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
您可以使用简单的方法使用sortUsingSelector
对数组进行排序,代码如下。
[array sortUsingSelector:@selector(compare:options:)];
NSLog(@"array after sort in max:%@",array);
我认为这是最简单的方法,而没有使用任何描述符。