2013-05-23 10 views
5

Ich habe zwei Arrays. Lassen Sie uns sagen:Sortieren eines Arrays in der gleichen Reihenfolge wie ein anderes Array

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

und

IQ = 110, 145, 75, 122, 130 

ich sie von IQ sortieren möchten. Sage am höchsten zum niedrigsten. Ich kann ein Array sortieren ... und dann gehe ich zurück und überprüfe, in welcher Position es sich befindet, und ordne dann das andere Array neu an. Es scheint, als müsste es einen besseren Weg geben, dies zu tun. Vor allem, wenn das Array größer wird.

Hier ist, wie ich es gerade mache.

d1, d2, d3, d4, d5 sind meine IQ Variable. Ich verwende das Array sortBack, um ein anderes Array in derselben Reihenfolge neu anzuordnen.

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

Warum pflegen Sie zwei Arrays dafür. Es ist besser, eine Reihe von Wörterbüchern mit Namen und IQ-Werten zu haben. Sie können dann einen Sortierdeskriptor mit dem Schlüssel IQ erstellen und das Array sortieren. Wenn Sie eine verwandte Information haben, halten Sie sie immer zusammen. – Anupdas

+0

Ja, ich dachte, das könnte der richtige Weg sein, aber ich neige dazu, mich mit dem Wörterbuchzeug zu verwirren. Ich werde es mir nochmal ansehen. –

+0

Es wäre sehr schwierig, wenn Sie nicht Wörterbücher oder benutzerdefinierte Modellobjekte verwenden, um Daten strukturiert zu halten. Ich habe ein Beispiel gepostet. Schau mal. – Anupdas

Antwort

19

Dies wäre eine bessere Möglichkeit, ein Wörterbuch für Benutzer zu erstellen. Und dann die Sortierung auf der Grundlage ihrer spezifischen Werte wie IQ, Name etc.

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

Alter ... Danke ... !!!! Hat mir wie Charme geholfen ...! – JgdGuy

+0

Danke für Ihre Hilfe – SampathKumar

+0

Eigentlich möchte ich diese Art von Sortierung auf Datum basieren .... Danke für die Rettung meiner Zeit .... es funktioniert wie Magie !!!! –

3

Konstruieren eines 2D-Arrays mit einer ersten Reihe, wie Namen und die zweite Reihe als IQ Sort Dieses Array gemäß der IQ in O (n log n)

Verwandte Themen