首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混洗NSNumbers数组并将其转换回int

混洗NSNumbers数组并将其转换回int
EN

Stack Overflow用户
提问于 2012-01-30 06:40:18
回答 2查看 217关注 0票数 1

我有一个大小为n的NSMutableArray urlArray,我想从数组中的元素总数中随机选择4个URL。

但是,我不想直接混洗urlArray,我更喜欢创建一个"indexArray“0 ...(n-1)对这些元素进行混洗,然后使用混洗后的indexArray的前4个元素来决定我从urlArray中选择哪些元素。

首先,我创建了indexArray,如下所示:

代码语言:javascript
复制
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语法。

有什么想法吗?感谢您的任何提示:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-30 06:50:06

为什么不创建一个普通的c数组,对其进行混洗,然后使用数组中的前四个整数作为for随机索引?

就像这样

代码语言:javascript
复制
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问题无关)

票数 2
EN

Stack Overflow用户

发布于 2012-01-30 06:49:25

对于只存储整数并且在相对较短的任务后被丢弃的临时数组,我肯定更喜欢C风格的数组:这将避免大量的开销,并且也易于读取。

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9057436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档