我想存储键和可变大小数组之间的静态关联。
"foo" => ["bar", "awe"]
"foo2" => ["bar2", "awe2", "gruh"]
该数组在程序执行期间永远不会改变,它只是一种将字符串变量数组与字符串键静态关联的方法。
子阵列的数量非常少(< 100)。
我怎样才能在纯C中做到这一点?
好的,这是有人给我的解决方案:
struct
{
const char *key;
const char **values;
} key_to_values[] =
{
{ .key = "foo", .values = (const char *[]) { "val1", "val2", NULL } },
{ .key = "bar", .values = (const char *[]) { "val3", "val4", "val5", NULL } },
};
您可以使用哈希表来做到这一点。
例如:
#include <stdint.h>
#include <string.h>
uintmax_t hash(const char *s) { /* ... */ }
static const char t[N][M];
void init_string(void)
{
strcpy(t[hash("foo")][0], "bar");
strcpy(t[hash("foo")][1], "awe");
/* etc */
}
char *get_string(const char *s)
{
return t[hash(s)];
}
去做:
N
和M
; hash
函数;如果我正确理解您的意图,您想将数组与字符串键相关联,那么我认为使用核心 c 中的任何内置构造都不可能做到这一点,即 c 数组仅由整数索引。
总是可以写一个哈希表,但字符串到索引的映射必须由程序员自己完成。
在 C++ 中,您可以使用映射来实现此目的,但映射是 STL 的一部分。