2012-12-09 50 views
0

您好我有兩個數組有一個有200 +對象(永遠不會更改),另一個是整數數組(作爲NSNumber對象)什麼是最簡單的方法來創建第三個數組將是來自數組1的所有對象的數組包含在數組2的索引數組中?Objective C可變數組從索引提取

+0

如果您可以使用'NSIndexSet'而不是第二個數組。然後它只是一個'[array1 objectsAtIndexes:indexSet]' –

+0

我看到兩種不同的解決方案,都投了!你能舉例說明你真正想要什麼嗎? –

回答

2

一種選擇方法將是索引的數組轉換爲NSIndexSet然後用objectsAtIndexes:

NSArray *objects = @[@"A", @"B", @"C", @"D", @"E", @"F", @"G"]; 
NSArray *indexArray = @[@(0), @(2), @(6)]; 

NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; 
for (NSNumber *number in indexArray) { 
    [indexSet addIndex:[number unsignedIntegerValue]]; 
} 
NSArray *filtered = [objects objectsAtIndexes:indexSet]; 

結果:A, C, G

當然,如果可以,最好是直接使用索引集,而不是n陣列。

或者你可以只使用一個簡單的循環。

NSMutableArray *filtered = [[NSMutableArray alloc] 
          initWithCapacity:indexArray.length]; 
for (NSNumber *number in indexArray) { 
    [filtered addObject:objects[[number unsignedIntegerValue]]]; 
} 
+0

感謝這個答案就是我一直在尋找的。最後一個問題我的數組我回來(過濾)成爲一個不可變的數組與上面的代碼,我怎麼生成它作爲一個可變數組,以便我可以進一步過濾它,如果需要? – user1096447

+0

'NSMutableArray * filtered = [NSMutableArray arrayWithArray:[objects objectsAtIndexes:indexSet]];' – DrummerB

1

您可以創建集和使用上NSMutableSet

NSArray *array1 = @[ @1, @2, @3 ]; 
NSArray *array2 = @[ @2 ]; 

NSMutableSet *set = [NSMutableSet setWithArray:array1]; 
[set intersectSet:[NSSet setWithArray:array2]]; 

NSLog(@"%@", set.allObjects); 

//=>(2) 
+0

我不認爲這就是他要找的。 – DrummerB

+0

@DrummerB ...但實際上如果你一個字讀一個問題就是正確的答案。 –

+0

我想他會說「200+數字」而不是「對象」,如果他的意思是這樣,但是你說得對,這絕對不是一個明確的問題。 – DrummerB