2012-08-12 69 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