Сортировка и сопоставление
NSMutableArray *full_text_list = [[NSMutableArray alloc]init];
[full_text_list addObject:@"for"];
[full_text_list addObject:@"for your information"];
[full_text_list addObject:@"you"];
[full_text_list addObject:@"at"];
NSMutableArray *short_text_list = [[NSMutableArray alloc]init];
[short_text_list addObject:@"4"];
[short_text_list addObject:@"fyi"];
[short_text_list addObject:@"u"];
[short_text_list addObject:@"@"];
я не хочу сортировать второй массив. Я хочу получить соответствующий элемент на основе индекса. Я хочу отсортировать только массив full_text_list по длине, поэтому я попробовал ниже
NSSortDescriptor * descriptors = [[[NSSortDescriptor alloc] initWithKey:@"length"
ascending:NO] autorelease];
NSArray * sortedArray = [full_text_list sortedArrayUsingDescriptors:
[NSArray arrayWithObject:descriptors]];
и приведенный выше код работает нормально. Но я не уверен, как сопоставить массив short_text_list с новым отсортированным массивом
So when doing like [full_text_list objectatindex:0] and [short_text_list objectatindex:0] will not match
result would be "for your information" and "for" but the result should be "for your information" and "fyi"
пожалуйста, дайте мне знать
3 ответа
Второй способ сделать это будет:
// Create your two arrays and then combine them into one dictionary:
NSDictionary *textDict = [NSDictionary dictionaryWithObjects:short_text_list
forKeys:full_text_list];
// Create your sorted array like you did before:
NSSortDescriptor * descriptors = [[[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO] autorelease];
NSArray * sortedArray = [full_text_list sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptors]];
// Then to access short_text, you would use:
NSString *object0ShortText = [textDict objectForKey:[sortedArray objectAtIndex:0]];
Как это должно соответствовать? У вас есть два массива, и вы просто сортируете один, и ожидаете, что второй будет автоматически отсортирован? Это не может работать. Почему бы вам просто не создать словарь с длинной информацией в качестве ключа и короткой в качестве значения или против?
Я бы создал новый класс, который содержит оба значения, и вставил бы его в массив вместо создания двух отдельных массивов:
@interface TextList : NSManagedObject
@property (nonatomic, retain) NSString *full_text;
@property (nonatomic, retain) NSString *short_text;
- (TextList *)initWithFullText:(NSString *)full_text shortText:(NSString *)short_text;
@end
Создайте свой файл.m, а затем, когда вы захотите его использовать, используйте что-то вроде:
NSMutableArray *full_text_list = [[NSMutableArray alloc]init];
[full_text_list addObject:[TextList initWithFullText:@"for" shortText:@"4"]];
[full_text_list addObject:[TextList initWithFullText:@"for your information" shortText:@"fyi"]];
[full_text_list addObject:[TextList initWithFullText:@"you" shortText:@"u"]];
[full_text_list addObject:[TextList initWithFullText:@"at" shortText:@"@"]];
Затем выполните сортировку:
NSSortDescriptor * descriptors = [[[NSSortDescriptor alloc] initWithKey:@"full_text.length" ascending:NO] autorelease];
NSArray * sortedArray = [full_text_list sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptors]];
Теперь вы можете сделать [[sortedArray objectAtIndex:0] full_text];
а также [[sortedArray objectAtIndex:0] short_text];
или же
TextList *txtList = [sortedArray objectAtIndex:0];
// txtList.full_text and txtList.short_text are both valid.