[英]Associative array in C
在php
我可以创建一个associative array
例如
$my_arr = array('a' => 'Apple', 'b' => 'Ball', 'c' => 'Cat');
是否可以在C
创建associative array
您可能认为这是C 中关联数组的重复问题,但我找不到我想要的。
真正强大而简单的方法是拥有一个带有键和值字段的结构。 让我们称它为pair(从具有相同名称和目的的C++ 类派生的名称)。 您还应该考虑您想要的配对字段的类型。 我举了一个例子作为字符到字符串值作为你的 php 例子。 但是为了使用不同的类型,您必须使用 void*,但这会导致非常复杂且可能容易出错的实现。
就像是
struct
{
char key;
char* value;
}pair;
struct pair map[size];
pair assocation;
assocation.key = 'a';
assocation.value = "Apple"; // Be sure to allocate the C strings so that you do not introduce memory leak or data corruption, same for void*. This here is just an hack.
map[0] = assocation;
// Later in your algorithms and parsers you just access it as an value in array.
pair aPair = map[1];
char aKey = aPair.key;
char* aValue = aPair.value;
当你想要一个像关联数组这样的链表时,再向结构中添加一个字段:
void* nextPair;
有了它,您可以在任何地方分配键值对,而无需将它们包含在单个数组中。
正如其他人所说,C 太低级,无法内置关联数组类型。 可能最接近它的是使用第三方库,例如http://svn.freebsd.org/base/head/sys/sys/tree.h ,记录在http://www.freebsd.org /cgi/man.cgi?tree或http://ivoras.sharanet.org/freebsd/usetree.html 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.