2013-05-23 3 views
5

У меня есть два массива. Скажем:Сортировка одного массива в том же порядке, что и другой массив

array = "Dave", "Mike", "Joe", "Jason", "Kevin" 

и

IQ = 110, 145, 75, 122, 130 

Я хочу, чтобы отсортировать их IQ. Скажите наивысшее до самого низкого. Я могу сортировать один массив ... и затем возвращаюсь и проверяю, в какой позиции он находился, а затем перестроил другой массив. Кажется, должен быть лучший способ сделать это. Особенно, если массив становится больше.

Вот как я это делаю прямо сейчас.

d1, d2, d3, d4, d5 являются моими IQ переменной. Я использую массив sortBack, чтобы переставить другой массив в том же порядке.

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:[NSString stringWithFormat:@"%d",d1], [NSString stringWithFormat:@"%d",d2],[NSString stringWithFormat:@"%d",d3], [NSString stringWithFormat:@"%d",d4],[NSString stringWithFormat:@"%d",d5], nil]; 

//sorting 
[myArray sortUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) { 
    return [str1 compare:str2 options:(NSNumericSearch)]; 
}]; 

for(int i=0;i<5;i++) 
{ 
    if([[myArray objectAtIndex:i] integerValue]==d1) 
    { 
     sortBackArray[i]=1; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d2) 
    { 
     sortBackArray[i]=2; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d3) 
    { 
     sortBackArray[i]=3; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d4) 
    { 
     sortBackArray[i]=4; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d5) 
    { 
     sortBackArray[i]=5; 
    } 
} 
+6

Почему вы поддерживаете для этого два массива. Лучше иметь массив словарей с именами и значениями IQ. Затем вы можете создать sortDescriptor с ключом IQ и отсортировать массив. Когда у вас есть соответствующая информация, всегда держите их вместе. – Anupdas

+0

Да, я думал, что это может быть путь, но я, похоже, путаюсь со словарем. Я еще раз посмотрю на это. –

+0

Было бы очень сложно, если бы вы не использовали словари или пользовательские объекты модели, чтобы сохранить структурированные данные. Я привел пример. Взглянуть. – Anupdas

ответ

19

Это был бы лучший способ сделать словарь для пользователей. И затем сортировка на основе их конкретных значений, как IQ, Имя и т.д.

NSArray *users = @[@"Dave",@"Mike",@"Joe",@"Jason",@"Kevin"]; 
NSArray *iqs = @[@110,@145,@75,@122,@130]; 

NSMutableArray *array = [NSMutableArray array]; 
for (int idx = 0;idx<[users count];idx++) { 
    NSDictionary *dict = @{@"Name": users[idx],@"IQ":iqs[idx]}; 
    [array addObject:dict]; 
} 

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"IQ" ascending:NO]; 
[array sortUsingDescriptors:@[descriptor]]; 
+0

Чувак ... Спасибо ... !!!! Помогли мне как очарование ...! – JgdGuy

+0

Спасибо за вашу помощь – SampathKumar

+0

На самом деле я хочу этот тип рода, основанный на дате .... Спасибо, что сэкономил мое время .... он работает как магия !!!! –

3

Построить 2d массива с первой строкой в ​​качестве имен и второго ряда, как IQ Сортировки этого массива в соответствии с IQ в O (NlogN)

Смежные вопросы