按照另一个数组的顺序对一个数组进行排序

5

I have two arrays. Let's say:

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

并且

IQ = 110, 145, 75, 122, 130

我希望按照智商将它们排序,从高到低。我可以对一个数组进行排序...然后回去检查它在哪个位置,然后重新排列另一个数组。如果数组变得更大,这种方法似乎不太好用。这是我现在的做法。 目前我这样做: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
为什么要维护两个数组?最好使用一个包含名称和智商值的字典数组。然后,你可以创建一个以智商值为键的 sortDescriptor 并对数组进行排序。当你有相关信息时,总是将它们放在一起。 - Anupdas
是的,我认为这可能是正确的方法,但我往往会因字典部分而感到困惑。我会再看一眼的。 - Cherr Skees
如果你不使用字典或自定义模型对象来保持数据结构化,那将会非常困难。我已经发布了一个例子,请看一下。 - Anupdas
2个回答

19

这将是为用户制作字典的更好方法。然后基于特定的值,如智商、姓名等进行排序。

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]];

实际上,我想要根据日期进行这种类型的排序...谢谢你节省了我的时间...它就像魔法一样有效!!! - Pravin Kamble

3

构建一个二维数组,第一行为姓名,第二行为智商 按照智商在O(nlogn)时间复杂度内排序此数组


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接