我想对数组进行排序。。。。在我的数组中,元素按日期顺序排列数组{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
但我想要这个数组的顺序相反我用这个代码倒车。。
dateArray=[[NSMutableArray alloc]initWithArray:[[date reverseObjectEnumerator] allObjects]];
但它给出了这个输出
dateArray=(
9,
8,
7,
6,
5,
4,
3,
2,
19,
18,
17,
16,
15,
14,
13,
12,
11,
10,
1,
0
)
但我想要这个输出日期数组(19,18,17,16,15,14,13,12,11,10……2,1,0)我也使用了排序方法,但输出是一样的。我该怎么做???请帮助
编辑:
我的数组元素是NSDocument目录的内容。。。。
已解决这个问题已经解决了。我不知道按照我的意愿对数组进行排序的确切方法,但我更改了子路径的名称。并且它给出了正确的输出。。
提前感谢
我假设您的数组包含对象,而不是问题中的数字。下面是一个按升序或降序对数组进行排序的示例。
NSArray *array = [[NSArray alloc] initWithObjects:@"5",@"1",@"0",@"3",@"2",@"4", nil];
//or
NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:5], [NSNumber numberWithInt:1], [NSNumber numberWithInt:0], [NSNumber numberWithInt:3], [NSNumber numberWithInt:2], [NSNumber numberWithInt:4], nil];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:nil ascending:NO]; //YES, for ascending
NSLog(@"Sorted array %@",[array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sort, nil]]);
如果您想使用字符串而不是数字,则应该使用以下格式进行正确排序:
20
、19
。。。10
、09
、08
。。。02
、01
、00
因此,您只需要为每个数字添加一个前导0
。如果它们是字符串,则可以仅像字符串一样对它们进行排序,而不是像数字一样,这就是为什么需要前导零的原因。
顺便说一句,最无痛的解决方案是重命名子路径,然后,在字符串所在的位置,您不需要更改应用程序中的任何其他内容来获得正确的顺序。
您需要使用
-[NSArray sortedArrayUsingSelector:]
或
-[NSMutableArray sortUsingSelector:]
并传递@selector(compare:)作为参数。
三种方式(我相信还有很多其他方式)。最简单的方法(感谢这个SO问题)是使用reverseObjectEnumerator:
NSArray *dateArrayReversed = [[dateArray reverseObjectEnumerator] allObjects];
或者你可以使用一个排序描述符(混乱):
NSArray *arrayOne = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13,@14,@15,@16,@17,@18,@19, nil];
NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: NO];
NSArray *arrayTwo = [arrayOne sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];
另一种方法是为反向数组创建一个类别。看看这个这是一个很好的例子。
如何在Objective-C中反转NSArray?
这很容易做到,您可以通过NSSortDescriptor对数组进行排序,但我将向您展示一个小技巧。这是代码
NSMutableArray *yourArray=[[NSMutableArray alloc] initWithObjects:@"1",@"5",@"10",@"6",@"3",@"11", nil];
NSMutableArray *array=[[NSMutableArray alloc] init];
int count=[yourArray count];
for (int i=0; i<count; i++) {
[array addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[[yourArray objectAtIndex:i]intValue]],@"val", nil]];
}
if([array count] > 0){
NSSortDescriptor * descriptor = [[[NSSortDescriptor alloc] initWithKey:@"val"
ascending:NO] autorelease];
NSArray * sortedArray = [array sortedArrayUsingDescriptors:
[NSArray arrayWithObject:descriptor]];
[array removeAllObjects];
[array addObjectsFromArray:sortedArray];
}
[yourArray removeAllObjects];
[yourArray release];
NSLog(@"sorted array=%@",array);
我在这方面所做的是,首先将NSNumber形式的字符串对象添加到一个可变字典中,然后将该字典添加到另一个数组中。现在使用NSSortDescriptor按升序或降序对数组进行排序。