Назначение ключей NSDictionary для строк NSStrings - PullRequest
0 голосов
/ 30 сентября 2011

Я импортирую текстовый файл со списком имен и фамилий. Каждое новое имя находится в отдельной строке, поэтому я импортировал их в NSMutableArray, а затем разделил их с помощью componentSeparatedByString: @ "\ n". Затем я хочу отсортировать имена по фамилии. Я нашел это Сортировка коллекций , но я заблудился из-за того, как я сказал бы моим NSStrings, которые находятся в моем массиве, иметь firstName и lastName ключа. Очевидно, я должен был бы создать NSDictionary, но вы можете сделать цикл for, где я говорю что-то вроде чего-либо до того, как "" (пробел) будет firstName, а все, что после, будет lastName.

Надеюсь, я достаточно ясно,

Спасибо заранее.

РЕДАКТИРОВАТЬ: все это будет отображаться в UITableView, если это изменит / поможет.

1 Ответ

1 голос
/ 30 сентября 2011

Лично я бы сделал простой класс с именем Name, у которого есть свойство для firstName и свойство для lastName.Затем вы можете перебрать массив и создать свои экземпляры Name, добавить их в NSMutableArray и затем отсортировать массив.Вы можете, конечно, пойти по маршруту словаря.

Вот пример:

NSMutableArray *namesList = [NSMutableArray arrayWithCapacity:0];

for (NSString *name in originalArray) {
  NSArray *tempArray = [name componentsSeparatedByString:@" "];
  Name *newNameInstance = [[Name alloc] init];
  newNameInstance.firstName = [tempArray objectAtIndex:0];
  newNameInstance.lastName = [tempArray objectAtIndex:1];
  [namesList addObject:newNameInstance];
}

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"lastName"
                                              ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [namesList sortedArrayUsingDescriptors:sortDescriptors];

Этот код не был проверен, но он должен работать.Я не позаботился об управлении памятью, поэтому помните об этом.

Обновление Извините, должно быть [tempArray objectAtIndex: 0].Исправлено выше.

Поскольку firstName и lastName являются строками, они должны быть объявлены как NSString.Старайтесь не использовать идентификатор для свойства, если у вас нет действительно веской причины.

Обновление 2 Если вы хотите проверить значения, сделайте следующее:

for (Name *name in sortedArray) {
   NSLog(@"%@", name.firstname);
   NSLog(@"%@", name.lastName);
}
...