如何在C中构造和访问一组键值对?使用一个愚蠢的简单示例,假设我想创建一个在整数和平方根之间进行转换的表。
如果我正在编写javascript,我可以这样做:
var squareRoots = {
4: 2,
9: 3,
16: 4,
25: 5
}
然后访问它们:
var squareRootOf25 = squareRoots[5]
我如何在C中执行此操作?如果我想使用一种类型的枚举作为键和另一种类型的枚举作为值,该怎么办?
答案 0 :(得分:3)
没有内置方法可以做到这一点,除非你计算在C99中初始化这样的数组:
double squareRoots[] =
{
[4] = 2.0,
[9] = 3.0,
[16] = 4.0,
[25] = 5.0,
};
但是,这会在数组中分配26个元素;其他值都是零。
假设你不是这个意思,那么请看D R Hanson的C Interfaces and Implementations;它显示了一种实现关联数组(也就是哈希或字典)的方法。
答案 1 :(得分:3)
答案 2 :(得分:1)
您也可以将libghthash用于通用哈希。它们非常易于使用,并且可以在您的应用程序中使用。但是,它是第三方API - 所以如果这是一个问题,你必须实现自己的。
C中没有内置的关联数组/哈希表。
除非你有非数字键,否则数组初始化(C99)可能是最好的方法:
T hash[] = {
[1] = tObj,
[255] = tObj2,
};
答案 3 :(得分:0)