用C语言制作元组

用C语言制作元组,c,tuples,bind,associative-array,key-value,C,Tuples,Bind,Associative Array,Key Value,我现在遇到了一个问题,我试图将一个字符串绑定到一个值。在C中关联这些值的最简单方法是什么?我基本上想要一个类似Python的元组,可以添加到列表中 这就是C结构的用途。例如,以下结构是一个元组,它将一个字符串(最多20个字符)绑定到一个整数值: typedef struct { char strVal[21]; int intVal; } tTuple; tTuple类型的变量(或动态分配的指向它们的指针)可以传递、添加到列表中,并以任何对您的情况有意义的方式进行操作 下面的

我现在遇到了一个问题,我试图将一个字符串绑定到一个值。在C中关联这些值的最简单方法是什么?我基本上想要一个类似Python的元组,可以添加到列表中

这就是C结构的用途。例如,以下结构是一个元组,它将一个字符串(最多20个字符)绑定到一个整数值:

typedef struct {
    char strVal[21];
    int intVal;
} tTuple;
tTuple
类型的变量(或动态分配的指向它们的指针)可以传递、添加到列表中,并以任何对您的情况有意义的方式进行操作


下面的完整程序使用与上述结构类似的结构来说明这一点。它可能需要更多的健全性检查(a),但如果只是演示如何执行元组(这就是问题所要问的),就可以了:



(a) 例如检查字符串长度和数组计数是否溢出,或禁止重复键(如果需要)。

关联不同类型值的另一种方法是创建并行数组。每个类型化元素对应一个数组,通过具有相同索引进行关联

char *strVal[5];
int intVal[5];
因此
strVal[0]
intVal[0]
相关联,依此类推


这种表示元组的方法即使在没有
struct
record
类型的语言中也可以应用。

如果要保留不同的类型,使用void指针和malloc最终会更干净(从长远来看)。我做这件事已经40多年了,所以我觉得更干净。我不太明白你的建议。在实际应用程序中,数据可能需要重新调整大小,或者使用通用接口。但是,我认为在这里添加这些内容会使示例更加模糊。我已经为动态调整大小的数组和字典编写了代码,令人惊讶的是,它可以在现实世界的应用程序中工作。但是,同样,这取决于你的经验水平,你对指针的舒适度,等等。我并不是建议这是最好的选择,只是需要注意一些事情。我几乎总是使用
struct
进行封装。
==========
Tuple count is 0
==========
Adding 'aardvark', mapped to 31
Adding 'buffalo', mapped to 41
Adding 'camel', mapped to 59
Adding 'dingo', mapped to 27
==========
Tuple count is 4
   [aardvark] -> 31
   [buffalo] -> 41
   [camel] -> 59
   [dingo] -> 27
==========
Deleting 'buffalo', mapped to 41
==========
Tuple count is 3
   [aardvark] -> 31
   [dingo] -> 27
   [camel] -> 59
==========
char *strVal[5];
int intVal[5];