IPhone-сортировочный массив
Я хочу отсортировать массив...
В моем массиве элементы находятся в этом порядке 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.
РЕШИТЬ
этот вопрос был опрокинут. Я не знаю, как точно сортировать мой массив, как я хочу, но я изменил имя своего подпути. и он дает правильный выход.
Спасибо в Advance
Ответы
Ответ 1
если вы хотите работать со строками вместо цифр, вы должны использовать следующий формат для правильной сортировки:
20
, 19
,... 10
, 09
, 08
,... 02
, 01
, 00
поэтому вам просто нужно добавить ведущий 0
к каждому номеру. если они являются строками, вы можете сортировать их как строки только, а не как числа, поэтому необходим нулевой нуль.
кстати, самое безболезненное решение , чтобы переименовать подпапки, тогда, когда строки приходят, и вам не нужно ничего менять в приложении для получения правильного порядка.
Ответ 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]]);
Ответ 3
вам нужно использовать
-[NSArray sortedArrayUsingSelector:]
или
-[NSMutableArray sortUsingSelector:]
и передайте @selector (сравните:) как параметр.
Ответ 4
Три способа (из многих других, я уверен).
Самый простой способ (благодаря этому вопросу SO) - использовать reverseObjectEnumerator:
NSArray *dateArrayReversed = [[dateArray reverseObjectEnumerator] allObjects];
Или вы можете использовать дескриптор сортировки (messy):
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 вопрос для отличного примера.
Как я могу отменить NSArray в Objective-C?
Ответ 5
Это легко сделать, вы можете отсортировать свой массив через 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 для сортировки массива в порядке возрастания или убывания.