int []的NSArray

Cra*_*ite 7 arrays iphone int xcode objective-c

我需要为我的关卡存储一堆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,...... }; 
Run Code Online (Sandbox Code Playgroud)

然后我需要随机获取其中一个.

wal*_*lky 10

编辑:改为使用一种不那么邪恶的方法,由汤米的评论提供.

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

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

...

int* level = [(NSValue*)[mutableArray objectAtIndex:whatever] pointerValue];
int someContainedInt = level[index];
Run Code Online (Sandbox Code Playgroud)

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

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

...

const int* level = (const int*) [(NSData*) [mutableArray objectAtIndex:whatever] bytes];
Run Code Online (Sandbox Code Playgroud)

我不得不同意Frank C,为什么你需要使用Cocoa数组来存储这些数组呢?难道你不能把整批作为2D C阵列处理吗?如果它是静态数据,那么动态方面NSMutableArray看起来几乎是多余的.

编辑2:使用C数组

如果您的关卡数组长度相同 - 称之为LEVEL_SIZE- 您可以构建一个直的2D数组,如下所示:

static int levels[][LEVEL_SIZE] = 
{
    {1, 2, 3, 4, ...},
    {15, 17, 19, 21, ...},
    {8, 7, 6, 5, ...}
};
Run Code Online (Sandbox Code Playgroud)

否则,您需要单独构建每个数组,然后将它们组合在一起:

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, ...};
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,你可以将一个级别作为指针:

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

首先,你将拥有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]];
Run Code Online (Sandbox Code Playgroud)

使用此阵列可以计算,获取和删除需求.当您拉出一个NSNumber对象时,使用它来索引到levels数组以获取级别:

int* level = levels[[someNSNumber intValue]];
Run Code Online (Sandbox Code Playgroud)

瞧瞧.


Mat*_*euF 8

使用NSNumber将int存储在NSMutableArray中.

这是示例代码:

// Add 
[yourMutableArray addObject:[NSNumber numberWithInt:yourInt]];

// Get 
yourInt = [((NSNumber*)[yourMutableArray objectAtIndex:0]) intValue];
Run Code Online (Sandbox Code Playgroud)