2013-11-20 56 views
0

说我有两个数组,一个代表另一个数组的期望顺序。我希望能够将顺序应用到数组。根据另一个数组重新排序NSMutableArray

我的推理是这样的。我的应用程序包含一个可以混洗的播放列表,我希望能够存储混合索引,以防用户稍后继续播放某个播放列表。所以,两个主要的要求是我需要能够在混洗列表中提取原始播放列表的索引,并且稍后能够将这些索引重新应用到原始播放列表以重新生成完全相同的混洗列表(我的混洗方法是随机的,每次都会有所不同)。

这是我的天真做法。我的主要问题是,什么是最有效的方法来做到这一点,什么是最好的方式来存储“订单”数组 - 显然使用一系列NSNumbers是不高效的,但我仍然是一个业余爱好者,而不是知道如何做得更好。

NSMutableArray *anArray = @[@"this",@"is",@"an",@"array"]; 
NSArray *numberArray = @[@(1),@(0),@(2),@(3)]; 
anArray = [self applyOrder:numberArray toArray:anArray]; 
NSLog(@"%@",anArray); 

-(NSMutableArray*)applyOrder:(NSArray *)order toArray:(NSArray *)array 
{ 
    NSMutableArray *newArray = [NSMutableArray array]; 
    for(int i =0;i<order.count;i++) 
    { 
     [newArray addObject:[array objectAtIndex:[[order objectAtIndex:i]integerValue]]]; 
    } 

    return newArray; 
} 
+0

不是问题的答案,但是您可以通过编写'@(theNumber)'来编写'NSNumber'作为文字,并且您可以使用'@ [@“this”,@“来编写一个'NSArray'作为文字。是“,@”an“,@”array“];'也不需要'nil'终止数组。 –

+0

方便的提示!谢谢! – JoshDG

回答

3

若要在分拣过程中的总量控制,我觉得最好的方法是使用需要块进行比较的NSArray类的sortedArrayUsingComparator:方法。您可以使用下面的代码进行排序:

NSArray* anArray = @[@"this",@"is",@"an",@"array"]; 
NSArray* numberArray = @[@(1),@(0),@(2),@(3)]; 
NSArray* sorted = [anArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSNumber* i = numberArray[[anArray indexOfObject:obj1]]; 
    NSNumber* j = numberArray[[anArray indexOfObject:obj2]]; 
    return [i compare:j]; 
}]; 
NSLog(@"%@",sorted); 

顺便说一下,存储指数在不同的阵列是不是在所有的低效的方法(想想数据库)。 :)

希望你会发现它有帮助。

+0

似乎对我来说简单! – JoshDG

相关问题