我有关于数组的问题。
所以,我有一个大小为255
的数组(我们称之为array(255)
)。我还有一个名为integer
的{{1}}。
我想对这些数组进行分类(我希望这个术语是对的)。
我想要的是:
如果所选的数组元素是
block
我知道在这种情况下我可以使用if语句。但是,如果我将数组大小扩展到数千?
我不能使用If语句行。
是否有更简单,更有效的解决方案?
答案 0 :(得分:1)
您只需使用整数除法即可:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>
#include <inttypes.h>
int main(void)
{
uint8_t array[255] = {0};
srand(time(NULL));
for(size_t i=0; i<sizeof(array)/sizeof(array[0]); i++)
{
array[i] = rand() % 256;
printf("Array[%zu]= %"PRIu8"\tblock= %"PRIu8"\n", i, array[i], array[i] / 64 );
}
}
答案 1 :(得分:0)
您应该执行以下操作:
int array[255];
...
int getArrayItemByCateg(int category, int index) {
return array[category * 64 + index];
}
答案 2 :(得分:0)
如果您的代码中只有指向元素的指针,则可以使用以下函数:
int getBlock(void* array, void* arrayElement, size_t size)
{
return (int)((arrayElement - array) / (size * 64));
}
此函数可用于不同的数组类型,但在调用此函数时必须知道原始数组。请参阅以下示例:
uint32_t array_u32[256];
uint16_t array_u16[256];
printf("array u32 index 32 is block %d\n", getBlock(array_u32, &array_u32[32], sizeof(array_u32[0])));
printf("array u32 index 129 is block %d\n", getBlock(array_u32, &array_u32[129], sizeof(array_u32[0])));
printf("array u16 index 32 is block %d\n", getBlock(array_u16, &array_u16[32], sizeof(array_u16[0])));
printf("array u16 index 129 is block %d\n", getBlock(array_u16, &array_u16[129], sizeof(array_u16[0])));
将打印以下结果:
array u32 index 32 is block 0
array u32 index 129 is block 2
array u16 index 32 is block 0
array u16 index 129 is block 2
另请参阅IDEONE上的代码。
答案 3 :(得分:0)
多维数组怎么样?信息:Tutorials Point - Multidimensional Arrays
这可能不是一个优雅的解决方案,但它非常简单。对于较大规模的数据,这可能不是理想的,但是使用二进制或四叉树的大规模数据可能是最好的。
多维数组:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
const int COLUMN_SIZE = 64;
const int ROW_SIZE = 4;
// Access index of row using the labels below
const int BLOCK_ONE = 0;
const int BLOCK_TWO = 1;
const int BLOCK_THREE = 2;
const int BLOCK_FOUR = 3;
int main(int argc, char* argv[]) {
int array[ROW_SIZE][COLUMN_SIZE] = {0};
srand(time(NULL));
/* Initialise array */
for(int x = 0; x < ROW_SIZE; x++) {
for(int i = 0; i < COLUMN_SIZE; i++) {
array[x][i] = rand() % (ROW_SIZE * COLUMN_SIZE);
}
}
/* Test */
for(int x = 0; x < ROW_SIZE; x++) {
for(int i = 0; i < COLUMN_SIZE; i++) {
printf("Array[%d][%d]: %d\n", x, i, array[x][i]);
}
printf("\n");
}
return 0;
}