4

我想存储键和可变大小数组之间的静态关联。

"foo" => ["bar", "awe"]  
"foo2" => ["bar2", "awe2", "gruh"]

该数组在程序执行期间永远不会改变,它只是一种将字符串变量数组与字符串键静态关联的方法。

子阵列的数量非常少(< 100)。

我怎样才能在纯C中做到这一点?

4

3 回答 3

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 } },
};
于 2012-10-31T17:01:45.633 回答
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)];   
}

去做:

  • 设置NM;
  • 定义hash函数;
  • 处理碰撞;
  • 处理其他错误。
于 2012-10-31T16:48:14.750 回答
1

如果我正确理解您的意图,您想将数组与字符串键相关联,那么我认为使用核心 c 中的任何内置构造都不可能做到这一点,即 c 数组仅由整数索引。

总是可以写一个哈希表,但字符串到索引的映射必须由程序员自己完成。

在 C++ 中,您可以使用映射来实现此目的,但映射是 STL 的一部分。

于 2012-10-31T16:46:01.673 回答