我有一个包含0,3,2,8等值的数组。我想按递增顺序对数组进行排序。请告诉我如何执行此操作。
提前致谢!!
答案 0 :(得分:15)
如果您的数组是包含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的其他方法:
如果你的数组是一个包含整数的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);
}
答案 1 :(得分:7)
如果您的数组仅使用NSNumber
那么简单,则不需要排序描述符。如果它被称为array
,那么
[array sortedArrayUsingSelector:@selector(compare:)];
将返回按升序排列的新数组,如您所愿。
答案 2 :(得分:2)
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:nil
ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [**YourArray** sortedArrayUsingDescriptors:sortDescriptors];
答案 3 :(得分:1)
排序有许多解决方案,每个解决方案都有不同的效率。
在我看来,最简单,最自然的一种是插入排序。转到此页面并向下滚动以查看代码。 Insertion sort
有关所有排序算法的更完整列表,check this page
答案 4 :(得分:1)
使用代码:[[myData allKeys]sortedArrayUsingSelector:@selector(psuedoNumericCompare:)]
;
myData是你的数组。如果您在代码中使用该行,它将按整数的大小排序(而不是按字母顺序排序,因此它不会像1, 111, 2,322, 333, 4445, 45, 67
那样排序,而是像1, 2, 45, 67, 111, 322, 333, 4445
一样排序。)
原始来源:How to let the sortedArrayUsingSelector using integer to sort instead of String?
答案 5 :(得分:0)
您可以使用sortUsingSelector
代码以简单方法对数组进行排序,如下所示。
[array sortUsingSelector:@selector(compare:options:)];
NSLog(@"array after sort in max:%@",array);
我认为这是不使用任何描述符的最简单方法。
答案 6 :(得分:0)
试试这个。如果你有像{1,10.11,12,2,23}那样的Array intArr
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;
}];