iphone - int[] 的 NSArray

标签 iphone objective-c arrays xcode int

我需要为关卡存储一堆 int[]。

我决定将 int[] 存储在 NSMutableArray 中并从数组中随机获取一个将是一个很好的方法。

事实是,int[] 不是对象,您不能将它添加到 obj-c 数组中。

有人对我如何获得随机整数数组有什么建议吗?

我的数组看起来像这样:

int lvl1[] { 4,80,49,6,40,77,21,20,91,5,100,91,...... }; 
int lvl2[] { 20,260,385,20,290,448,21,210,329,21,...... }; 
int lvl3[] { 441,21,90,364,21,70,385,21,170,434,...... }; 
...
int lvl50[] { 441,21,90,364,21,70,385,21,170,434,...... }; 

然后我需要随机获得其中一个。

最佳答案

编辑:根据 Tommy 的评论更改为使用不那么邪恶的方法。

您可以将静态数组视为指针并将它们存储在 NSValue 对象中:

[mutableArray addObject:[NSValue valueWithPointer:lvl1]];

...

int* level = [(NSValue*)[mutableArray objectAtIndex:whatever] pointerValue];
int someContainedInt = level[index];

或者,您可以将每个单独的数组包装在它自己的 NSData 对象中,并将它们存储在可变数组中:

[mutableArray addObject:[NSData dataWithBytes:lvl1 length:sizeof(int) * lengthOfArray]];

...

const int* level = (const int*) [(NSData*) [mutableArray objectAtIndex:whatever] bytes];

不过,我不得不同意 Frank C 的观点——为什么您需要使用 Cocoa 数组来存储这些数组?你不能把整个地 block 当作一个二维 C 数组吗?如果无论如何它都是静态数据,那么 NSMutableArray 的动态方面就显得多余了。

编辑 2: 使用 C 数组

如果您的关卡数组的长度都相同——称之为 LEVEL_SIZE——您可以像这样构建一个直的 2D 数组:

static int levels[][LEVEL_SIZE] = 
{
    {1, 2, 3, 4, ...},
    {15, 17, 19, 21, ...},
    {8, 7, 6, 5, ...}
};

否则,您需要分别构建每个数组,然后再将它们放在一起:

static int level1[] = {1, 2, 3, 4, ...};
static int level2[] = {15, 17, 19, 21, ...};
static int level3[] = {8, 7, 6, 5, ...};
...
static int* levels[] = {lvl1, lvl2, lvl3, ...};

无论哪种方式,您都可以提取一个级别作为指针:

int* level = levels[0];
printf("%d\n", level[1]); // should print 2

首先,您将拥有 NUM_LEVELS 个级别——在您的例子中是 50 个级别——所以将许多索引 0..49 粘贴到您的可变数组中,作为 NSNumber 对象:

NSMutableArray* levelIndices = [NSMutableArray arrayWithCapacity:NUM_LEVELS];
for ( int i = 0; i < NUM_LEVELS; ++i )
    [levelIndices addObject:[NSNumber numberWithInt:i]];

使用此数组满足您的计数、获取和删除需求。当你拉出一个 NSNumber 对象时,使用它索引到级别数组中以获得级别:

int* level = levels[[someNSNumber intValue]];

等等。

关于iphone - int[] 的 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5469886/

相关文章:

iphone - NSUserDefaults 未写入磁盘

arrays - 求和未排序数组中元素的算法

ios - 检查用户在应用内购买中购买的产品

iPhone:来自 CLLocationManager 的时间

iphone - 滑动手势在 IOS 中的 UIView 上不起作用

objective-c - 重新加载数据-UITableView

ios - 如何在 iOS 6 中将 Tab Bar 的背景颜色更改为半透明

iphone - 如何仅在视频上启用旋转

php - 相当于 mysql_fetch_array 的 PDO

java - 使用 ByteBuffer 处理 byte[]