2013-11-20 119 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

相關問題