我有一个大小为n的NSMutableArray urlArray,我想从数组中的元素总数中随机选择4个URL。
但是,我不想直接混洗urlArray,我更喜欢创建一个"indexArray“0 ...(n-1)对这些元素进行混洗,然后使用混洗后的indexArray的前4个元素来决定我从urlArray中选择哪些元素。
首先,我创建了indexArray,如下所示:
for (int i = 0; i < numberOfStems; i++) {
[indexArray addObject:[NSNumber numberWithInteger:i]];
} 这让我可以洗牌我的indexArray,到目前为止还不错。因为我使用了NSNumber numberWithInteger:i方法,所以随机排列的indexArray中的元素是NSNumbers。
有没有办法将indexArray中的NSNumber对象转换为int?
我尝试使用intValue函数,但这似乎不是我需要的。
我也尝试过创建一个c风格的数组,但也不是很成功-如果可能的话,我想坚持使用objective-c语法。
有什么想法吗?感谢您的任何提示:)
发布于 2012-01-30 06:50:06
为什么不创建一个普通的c数组,对其进行混洗,然后使用数组中的前四个整数作为for随机索引?
就像这样
int* index = malloc(numberOfStems*sizeof(int));
for (int i = 0; i < numberOfStems; ++i)
{
index[i] = i;
}
for (int i = numberOfStems - 1; i > 0; --i)
{
int randomIndex = arc4random() % i;
int tmp = index[i];
index[i] = index[randomIndex];
index[randomIndex] = tmp;
}现在使用索引来访问URL的
编辑:更新算法(虽然与OP问题无关)
发布于 2012-01-30 06:49:25
对于只存储整数并且在相对较短的任务后被丢弃的临时数组,我肯定更喜欢C风格的数组:这将避免大量的开销,并且也易于读取。
int *array = (int*)malloc(sizeof(int)*numberOfStems);
for (int i = 0 ; i != numberOfStems ; i++) {
array[i] = i;
}
// Do the shuffle
// Pick first four, and do whatever you need to do
// ...
// Now that you are done with the array, do not forget to free it:
free(array);https://stackoverflow.com/questions/9057436
复制相似问题