洗牌一系列NSNumber&转换回整数

时间:2012-01-29 22:40:18

标签: objective-c cocoa

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

但是我不想直接洗牌urlArray,我宁愿做一个“indexArray”[0 ...(n-1)]&洗牌这些,&然后使用shuffled indexArray的前4个元素来决定我从urlArray中选择哪些元素。

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

for (int i = 0; i < numberOfStems; i++) {

    [indexArray addObject:[NSNumber numberWithInteger:i]];

} 

这让我可以改变我的indexArray,到目前为止一切顺利。因为我用了 [NSNumber numberWithInteger:i]方法,混洗indexArray中的元素是NSNumbers。

有没有办法将indexArray中的NSNumber对象转换为整数?

我试图使用intValue函数,但这似乎不是我需要的。

我也试过创建一个c风格的数组,但也不是那么成功 - 如果可能的话,我想坚持使用objective-c语法。

有什么想法吗?任何提示赞赏:)

2 个答案:

答案 0 :(得分:2)

对于只存储整数的临时数组在相对较短的任务后被抛弃我肯定会更喜欢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);

答案 1 :(得分:2)

为什么不直接创建一个普通的c数组,然后将数组中的前四个整数用作随机索引?

类似

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;
}

现在使用index来访问URL的

EDITED:更新的算法(尽管与OP问题没有关系)