我需要從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. 在較大的陣列中放置較小的陣列,同時忽略零點
- 4. 將較大陣列分割爲較小陣列
- 5. 分陣列分成較小的陣列
- 6. C++讀取比較陣列
- 7. C#比較陣列
- 8. CUDA使用較大陣列的內容填充小陣列
- 9. 用較小陣列的數據填充大陣列
- 10. 與較小尺寸陣列相比,矩陣中的行提取。
- 11. 比較可選的陣列
- 12. C++連接兩個INT陣列成一個較大的陣列
- 13. Matlab中的陣列比較
- 14. 我們如何能在jQuery的比較陣列陣列陣列
- 15. 從陣列中提取較低,中間和較高距離
- 16. 比較陣列
- 17. 陣列比較
- 18. 陣列比較
- 19. 比較陣列
- 20. 陣列比較
- 21. Matlab:在較小陣列中切割數據陣列
- 22. 比較陣列以標量
- 23. 比較C兩個陣列++
- 24. C#如何比較INT陣列部分
- 25. 排序ND numpy的陣列與一個較小的ND陣列
- 26. 將較大的矩陣拆分爲較小的矩陣
- 27. 二維子陣列(一個較大的正方形中的較小正方形)
- 28. 蟒使用較小的2D陣列與另一更大的陣列
- 29. 歇字符串/陣列成較小的字符串/陣列
- 30. 將陣列添加到另一個較大的陣列
所以要清楚:它必須是32個連續的對象,還是32個隨機的唯一對象? – 2012-08-12 16:14:29
nope,它不,只需要獲得32個對象。但連續也很好。 – tipsywacky 2012-08-12 16:15:20