2012-08-12 54 views
0

我需要從75個對象的NSMutableArray中選取32個不同的對象。它可以是1到32,2到33或10到42.我應該使用什麼函數來獲得新陣列?對不起,作爲noob。如何從目標C中的較大陣列中選取較小的陣列?

+0

所以要清楚:它必須是32個連續的對象,還是32個隨機的唯一對象? – 2012-08-12 16:14:29

+0

nope,它不,只需要獲得32個對象。但連續也很好。 – tipsywacky 2012-08-12 16:15:20

回答

3

,請嘗試以下操作:

NSArray *arrayWithNConsecutiveObjects(NSArray *arr, int n) 
{ 
    int subIdx = arc4random_uniform((unsigned) (arr.count - n)); 

    return [arr subarrayWithRange:NSMakeRange(subIdx, n)]; 
} 

如果您需要32個隨機對象,則可以擴展此方法以隨機對數組進行排序:

NSArray *arrayWithNObjects(NSArray *arr, int n) 
{ 
    arr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
     // random sort 
     return arc4random_uniform(3) - 1; // one of -1, 0, and 1 
    }]; 

    int subIdx = arc4random_uniform((unsigned) (arr.count - n)); 

    return [arr subarrayWithRange:NSMakeRange(subIdx, n)]; 
} 
+0

我在這裏錯過了什麼嗎?其中一個要求是「獨特的對象」嗎? – user523234 2012-08-13 01:37:38

+1

@ user523234是的,這是隱含的。 – 2012-08-13 01:54:38

+0

由於數組可以包含重複的對象,因此我可能對「獨特對象」的解釋與OP不同。 – user523234 2012-08-16 00:10:00

2

您可以使用從NSArray繼承適當的方法來檢索的連續32個元素片:如果你想從一個隨機指數連續N個對象

int offset = 4; 
NSArray *slice = [array subarrayWithRange:NSMakeRange(offset, offset+32)]; 
+0

我在這裏錯過了什麼嗎?其中一個要求是「獨特的對象」嗎? – user523234 2012-08-13 01:38:01

+1

不同的對象和不連續的對象之間有區別。我的解決方案有32個不同的對象,它們是連續的(如在他的示例1到32等中) – Jack 2012-08-15 01:14:01

+0

由於數組可以包含重複的對象,因此我對「獨特對象」的解釋可能與OP不同。 – user523234 2012-08-16 00:10:26