Objective c iPhone排序阵列

Objective c iPhone排序阵列,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,我想对数组进行排序。。。。 在我的数组中,元素的顺序是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,

我想对数组进行排序。。。。 在我的数组中,元素的顺序是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
)
但是我想要这个输出日期数组(19,18,17,16,15,14,13,12,11,10…….2,1,0) 我也使用了排序方法,但输出是相同的。我该怎么做???请帮忙

编辑:

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

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

提前感谢

您需要使用

-[NSArray sortedArrayUsingSelector:]

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

您需要使用

-[NSArray sortedArrayUsingSelector:]


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

我假设数组中包含的是对象,而不是问题中的数字。下面是一个按升序或降序排列数组的示例

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]]);

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

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]]);
有三种方式(我相信还有很多其他方式)。 最简单的方法()是使用reverseObjectEnumerator:

NSArray *dateArrayReversed = [[dateArray reverseObjectEnumerator] allObjects];
或者可以使用排序描述符(凌乱):

另一种方法是为反转数组创建一个类别。看见 这是一个很好的例子

有三种方式(我相信还有很多其他方式)。 最简单的方法()是使用reverseObjectEnumerator:

NSArray *dateArrayReversed = [[dateArray reverseObjectEnumerator] allObjects];
或者可以使用排序描述符(凌乱):

另一种方法是为反转数组创建一个类别。看见 这是一个很好的例子


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

20
19
<代码>10,
09
08
<代码>02,
01
00

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



顺便说一句,最轻松的解决方案是重命名子路径,即字符串出现的位置,您无需更改应用程序中的任何其他内容即可获得正确的顺序。

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

20
19
<代码>10,
09
08
<代码>02,
01
00

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



顺便说一句,最轻松的解决方案是重命名子路径,即字符串出现的位置,这样您就不需要在应用程序中更改任何其他内容来获得正确的顺序。

这很容易做到,您可以通过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);
NSMutableArray*yourArray=[[NSMutableArray alloc]initWithObjects:@“1”、“5”、“10”、“6”、“3”、“11”、零];
NSMUTABLEARRY*array=[[NSMUTABLEARRY alloc]init];
int count=[yourArray count];
对于(int i=0;i 0){
NSSortDescriptor*描述符=[[NSSortDescriptor alloc]initWithKey:@“val”
升序:无]自动释放];
NSArray*SorterDarray=[使用描述符的数组SorterDarray:
[NSArray arrayWithObject:描述符]];
[array removeAllObjects];
[数组addObjectsFromArray:sortedArray];
}
[yourArray removeAllObjects];
[yourArray release];
NSLog(@“排序数组=%@”,数组);

我在这里做的是,首先将NSNumber形式的字符串对象添加到可变字典中,然后将此字典添加到另一个数组中。现在使用NSSortDescriptor按升序或降序对数组进行排序。

这很容易做到,您可以通过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);
NSMutableArray*yourArray=[[NSMutableArray alloc]initWithObjects:@“1”、“5”、“10”、“6”、“3”、“11”、零];
NSMUTABLEARRY*array=[[NSMUTABLEARRY alloc]init];
int count=[yourArray count];
对于(int i=0;i 0){
NSSortDescriptor*描述符=[[NSSortDescriptor alloc]initWithKey:@“val”
升序:无]自动释放];
NSArray*SorterDarray=[使用描述符的数组SorterDarray:
[NSArray arrayWithObject:描述符]];
[array removeAllObjects];
[数组addObjectsFromArray:sortedArray];
}
[yourArray removeAllObjects];
[yourArray release];
NSLog(@“排序数组=%@”,数组);

我在这里做的是,首先将NSNumber形式的字符串对象添加到可变字典中,然后将此字典添加到另一个数组中。现在使用NSSortDescriptor按升序或降序对数组进行排序。

它似乎是基于
NSString
而不是
NSNumber
进行排序。我建议您使用类似于
sortUsingComparator:
。Thanx的回答,我现在就试试。如果您想使用字符串而不是数字,您应该使用以下格式进行正确排序:
20
19
<代码>10,
09
08
<代码>02,
01
00
,因此,您只需向每个数字添加一个前导的
0
。@holex实际上我正在从文档目录中获取元素。元素是目录的子路径。我不能