Сортировка и сопоставление - PullRequest
0 голосов
/ 21 марта 2012
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 ]

1 голос
/ 21 марта 2012

Как оно должно совпадать? У вас есть два массива, и вы просто сортируете один, и ожидаете, что второй будет автоматически отсортирован? Это не может работать. Почему бы вам просто не создать словарь с длинной информацией в качестве ключа и короткой в ​​качестве значения или против?

0 голосов
/ 21 марта 2012

Второй способ сделать это будет:

// 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]];
0 голосов
/ 21 марта 2012

Я бы создал новый класс, который содержит оба значения, и вставил бы его в массив вместо создания двух отдельных массивов:

@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.
...