我想在密钥和可变大小数组之间存储静态关联。
"foo" => ["bar", "awe"]
"foo2" => ["bar2", "awe2", "gruh"]
这个数组在程序执行期间永远不会改变,它只是一种将字符串的变量数组与字符串键静态关联的方法。
子阵列的数量非常低(<100)。
我怎样才能在纯 C ?
中做到这一点答案 0 :(得分:2)
好的,这是别人给我的解决方案:
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 } },
};
答案 1 :(得分:1)
如果我理解你的意图正确,你想要将数组与字符串键相关联,那么我认为这不可能使用核心c中的任何内置构造,即c数组只用整数索引。
总是可以写一个哈希表,但是字符串到索引的映射必须由程序员自己完成。
在C ++中,您可以使用映射来实现此目的,但map是STL的一部分。
答案 2 :(得分:1)
您可以使用哈希表来完成。
例如:
#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
函数;