2013-05-23 19 views
5

私は2つの配列を持っています。さんが言ってみましょう:別の配列と同じ順序で配列を並べ替える

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

IQ = 110, 145, 75, 122, 130 

私はIQによってそれらをソートしたいです。最高から最低まで私は1つの配列を並べ替えることができます...そして、私は戻って、それがどんな位置にあったかを確認してから、もう一方の配列を並べ替えます。これを行うにはより良い方法が必要であるようです。特に配列が大きくなる場合。

ここで私は今やっている方法です。

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

なぜこれのために2つの配列を維持していますか?名前とIQの値を持つ辞書の配列を持つ方がよいでしょう。次に、キーIQを使用してsortDescriptorを作成し、配列をソートできます。関連情報があるときは、常に一緒にしてください。 – 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

この配列O(nlogn)でIQ

に従ってIQ ソートなどの名前と第二行として最初の行と2次元配列を構築
関連する問題