首页 > 解决方案 > 初始化二维数组是否可以将连续整数映射到 C 中的字符串?

问题描述

我必须将连续的整数代码从 1 映射到 100 到 C 中的字符串。通常,对于数字到字符串的映射,我会有这样的事情:

#define code1   1
#define code2   2
.
.
#define code100 100

struct map 
   {
     int code;
     char *msg;
   }objs[100];

然后我将遍历 obj,如果数字匹配,我将使用 obj 数组的相应字符串。因为我知道要映射的数字是连续的,所以我可以这样做:

const char *arr[100] = { "abc", "def", ....... "100th msg"};

然后我可以忘记循环并打印 arr[code]。这是一个不好的方法吗?我看到的唯一缺点是,当其他人在中间添加代码时,他们必须小心。优点显然是我不需要遍历 struct 数组。

标签: carraysstructmapping

解决方案


使用直接索引数组是一种常用的方法,如果数据从不(很少)更改并且没有太多间隙,则可以正常工作,因为您为每个间隙花费了一条记录。在某些时候,差距的管理或存储成本可能会成为一个问题。

如果您需要处理数据的更多动态编译时更新,那么下一个最好的方法是排序数组。如果您可以保证您的条目始终按顺序排列,但可能存在间隙,或者在末尾添加了新条目,那么您可以二进制切分您的有序数组以快速找到您想要的条目。您可能希望执行一次启动过程来检查数组是否正确排序,但您只需执行一次。

如果您需要担心运行时更新,那么您需要考虑更高级别的容器抽象,例如映射树或哈希图。


推荐阅读