iPhone排序阵列



我想对数组进行排序。。。。在我的数组中,元素按日期顺序排列数组{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]]);

如果您想使用字符串而不是数字,则应该使用以下格式进行正确排序:

2019。。。100908。。。020100

因此,您只需要为每个数字添加一个前导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按升序或降序对数组进行排序。

最新更新