Objective c iPhone排序阵列
我想对数组进行排序。。。。 在我的数组中,元素的顺序是dateArray{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19} 但我希望这个数组的顺序相反 我用这个代码倒车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=[[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实际上我正在从文档目录中获取元素。元素是目录的子路径。我不能