【发布时间】:2013-11-20 22:23:34
【问题描述】:
假设我有两个数组,一个代表另一个所需的顺序。我希望能够将订单应用于数组。
我的理由是这样的。我的应用程序包含一个可以洗牌的播放列表,我希望能够存储洗牌后的索引,以防用户稍后继续给定的播放列表。因此,两个主要要求是我需要能够提取随机播放列表中原始播放列表的索引,然后能够将这些索引重新应用到原始播放列表以重新生成完全相同的随机播放列表(我的随机播放列表方法是随机的,每次都不一样)。
这是我幼稚的做法。我的主要问题是,最有效的方法是什么,以及存储“订单”数组的最佳方式是什么 - 显然使用 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;
}
【问题讨论】:
-
不是问题的答案,但您可以通过编写
@(theNumber)将NSNumber编写为文字,您可以使用@[@"this",@"is",@"an",@"array"];将NSArray编写为文字,这也消除了需要到nil终止数组。
标签: ios objective-c arrays cocoa-touch nsmutablearray