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;
    }
}
4

2 に答える 2

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]];
于 2013-05-23T09:41:58.600 に答える
3

最初の行を名前とし、2 番目の行を IQ とする 2 次元配列を作成します O(nlogn) の IQ に従ってこの配列を並べ替えます

于 2013-05-23T09:58:02.410 に答える