我需要从75个对象的NSMutableArray中选取32个不同的对象。它可以是1到32,2到33或10到42.我应该使用什么函数来获得新阵列?对不起,作为noob。如何从目标C中的较大阵列中选取较小的阵列?
回答
,请尝试以下操作:
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)];
}
我在这里错过了什么吗?其中一个要求是“独特的对象”吗? – user523234 2012-08-13 01:37:38
@ user523234是的,这是隐含的。 – 2012-08-13 01:54:38
由于数组可以包含重复的对象,因此我可能对“独特对象”的解释与OP不同。 – user523234 2012-08-16 00:10:00
您可以使用从NSArray
继承适当的方法来检索的连续32个元素片:如果你想从一个随机指数连续N个对象
int offset = 4;
NSArray *slice = [array subarrayWithRange:NSMakeRange(offset, offset+32)];
我在这里错过了什么吗?其中一个要求是“独特的对象”吗? – user523234 2012-08-13 01:38:01
不同的对象和不连续的对象之间有区别。我的解决方案有32个不同的对象,它们是连续的(如在他的示例1到32等中) – Jack 2012-08-15 01:14:01
由于数组可以包含重复的对象,因此我对“独特对象”的解释可能与OP不同。 – user523234 2012-08-16 00:10:26
- 1. 在较大的阵列中放置较小的阵列,同时忽略零点
- 2. 分阵列分成较小的阵列
- 3. C++读取比较阵列
- 4. C#比较阵列
- 5. 用较小阵列的数据填充大阵列
- 6. CUDA使用较大阵列的内容填充小阵列
- 7. 比较可选的阵列
- 8. 我们如何能在jQuery的比较阵列阵列阵列
- 9. 阵列比较
- 10. 阵列比较
- 11. 比较阵列
- 12. 比较阵列
- 13. Matlab:在较小阵列中切割数据阵列
- 14. 比较阵列以标量
- 15. 比较C两个阵列++
- 16. C#如何比较INT阵列部分
- 17. 将较大的矩阵拆分为较小的矩阵
- 18. 二维子阵列(一个较大的正方形中的较小正方形)
- 19. 蟒使用较小的2D阵列与另一更大的阵列
- 20. CUDA比较阵列
- 21. PHP比较阵列
- 22. 比较PHP阵列
- 23. android比较阵列
- 24. 有效地将较大的numpy阵列的切片复制到较小的连续内存阵列
- 25. C - 阵列中的阵列
- 26. 如何将更大的阵列缩小为更小的阵列?
- 27. 如何比较锯齿阵列中的项目?
- 28. Java的比较类阵列
- 29. 比较Groovy的阵列
- 30. 如何比较WordPress管理中的两个复选框阵列
所以要清楚:它必须是32个连续的对象,还是32个随机的唯一对象? – 2012-08-12 16:14:29
nope,它不,只需要获得32个对象。但连续也很好。 – tipsywacky 2012-08-12 16:15:20