0

我想对我的数组进行排序....在我的数组中,元素的顺序是 dateArray{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
)

但我想要这个输出 dateArray(19,18,17,16,15,14,13,12,11,10........2,1,0) 我也使用了排序方法,但输出是一样的。我怎样才能做到这一点???请帮忙

编辑:

我的数组元素是 NSDocument 目录的内容....

SOLVED 这个问题已经解决了。我不知道根据需要对数组进行排序的确切方法,但我更改了子路径名称。它给出了正确的输出..

提前致谢

4

5 回答 5

2

我假设您的数组包含对象而不是您的问题中的数字。这是一个按升序或降序对数组进行排序的示例。

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]]);
于 2012-08-31T09:55:38.563 回答
1

你需要使用

-[NSArray sortedArrayUsingSelector:]

或者

-[NSMutableArray sortUsingSelector:]并将@selector(compare:) 作为参数传递。

于 2012-08-31T09:55:06.007 回答
1

三种方式(我相信很多其他方式)。最简单的方法(感谢这个 SO question),是使用 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]];

另一种方法是为反转数组创建一个类别。请参阅这个 SO question 以获得一个很好的例子。

如何在 Objective-C 中反转 NSArray?

于 2012-08-31T10:01:07.797 回答
1

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

20, 19, ... 10, 09, 08, ... 02, 01,00

因此,您只需0为每个数字添加一个前导。如果它们是字符串,您可以仅将它们排序为字符串,而不是数字,这就是需要前导零的原因。


顺便说一句,最简单的解决方案是重命名子路径,然后是字符串所在的位置,并且您无需更改应用程序中的任何其他内容即可获得正确的顺序。

于 2012-08-31T11:04:52.350 回答
1

这很容易完成,您可以通过 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 以升序或降序对数组进行排序。

于 2012-09-01T11:48:52.473 回答