【发布时间】:2011-04-13 13:13:48
【问题描述】:
我有一个包含 0、3、2、8 等值的数组。我想按升序对数组进行排序。请告诉我该怎么做。
提前致谢!!
【问题讨论】:
标签: iphone objective-c sorting nsarray
我有一个包含 0、3、2、8 等值的数组。我想按升序对数组进行排序。请告诉我该怎么做。
提前致谢!!
【问题讨论】:
标签: iphone objective-c sorting nsarray
如果你的数组是一个包含 NSNumber 的 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);
}
【讨论】:
如果你的数组很简单,只需要NSNumbers,你就不需要排序描述符。如果叫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];
【讨论】:
排序有许多解决方案,每个解决方案的效率不同。
在我看来,最简单、最自然的排序是插入排序。转到此页面并向下滚动以查看代码。 Insertion sort
有关所有排序算法的更完整列表,check this page
【讨论】:
使用代码:[[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?
【讨论】:
您可以使用sortUsingSelector的代码以简单的方法对数组进行排序,如下所示。
[array sortUsingSelector:@selector(compare:options:)];
NSLog(@"array after sort in max:%@",array);
我认为这是不使用任何描述符的最简单方法。
【讨论】:
试试这个。如果你有像 {1,10.11,12,2,23} 这样的数组 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;
}];
【讨论】: