2013-05-23 14 views
5

Mam dwie tablice. Powiedzmy:Sortowanie jednej tablicy w tej samej kolejności co inna tablica

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

i

IQ = 110, 145, 75, 122, 130 

chcę sortować je według IQ. Powiedz Najwyższy do najniższego. Mogę sortować jedną tablicę ... a następnie wracam i sprawdzam, w jakiej pozycji się znajduje, a następnie przestawiam drugą tablicę. Wygląda na to, że musi istnieć lepszy sposób na zrobienie tego. Zwłaszcza jeśli tablica staje się większa.

Oto, jak to teraz robię.

d1, d2, d3, d4, d5 to moja zmienna IQ. Używam tablicy sortBack, aby zmienić kolejną tablicę w tej samej kolejności.

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

Dlaczego utrzymujesz do tego dwie tablice. Lepiej mieć zestaw słowników o nazwach i wartościach IQ. Następnie możesz utworzyć sortDeskryptor z kluczem IQ i posortować tablicę. Gdy masz powiązane informacje, zawsze trzymaj je razem. – Anupdas

+0

Tak, myślałem, że to może być droga, ale często mylę się ze słownikiem. Przyjrzę się temu jeszcze raz. –

+0

Byłoby bardzo trudno, jeśli nie korzystasz ze słowników lub niestandardowych obiektów modelu, aby zachować strukturę danych. Wysłałem przykład. Spójrz. – Anupdas

Odpowiedz

19

Byłby to lepszy sposób na stworzenie słownika dla użytkowników. A następnie sortowane na podstawie ich konkretnych wartościach, takich jak IQ, nazwa itp

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

Dude ... Dzięki ... !!!! Pomógł mi jak urok ...! – JgdGuy

+0

Dzięki za pomoc – SampathKumar

+0

Właściwie chcę tego typu sortowanie w oparciu o datę .... Dzięki za zaoszczędzenie czasu .... działa jak magia !!!! –

3

Construct 2d tablicę z pierwszym rzędzie jako imion i drugim rzędzie jak IQ Sortuj ta tablica według IQ w O (nlogn)

Powiązane problemy