GPtrArray,GHashTable ,GSList 使用例子
#include <glib.h>
typedef struct NetList{
gchar *stat;
gchar *name;
gchar * id;
}NetList;
GSList* list = NULL;
static void
hash_print (gpointer key, gpointer val, gpointer data)
{
printf ("%s --> %s\n", (char *) key, (char *) val);
NetList *net = (NetList *) data;
if((char *)key=="1"){
net->stat= (char*)val;
g_print("net->stat=%s\n",net->stat);
}
if((char *)key=="2"){
net->name= (char*)val;
g_print("net->name=%s\n",net->name);
}
if((char *)key=="3"){
net->id= (char*)val;
g_print("net->id=%s\n",net->id);
}
}
void array_print(GHashTable *hash,gpointer data)
{
char * date = (char * )data;
NetList *net = g_slice_new(NetList);
g_hash_table_foreach(hash,hash_print,net);
list = g_slist_append(list,net);
}
int main(int argc, char ** argv)
{
GPtrArray* a = g_ptr_array_new();
GHashTable *hash1,*hash2;
hash1= g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
g_hash_table_insert (hash1,"1","hello");
g_hash_table_insert (hash1,"2","come");
g_hash_table_insert (hash1,"3","here");
g_ptr_array_add (a,hash1);
hash2= g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
g_hash_table_insert (hash2,"1","a");
g_hash_table_insert (hash2,"2","b");
g_hash_table_insert (hash2,"3","c");
g_ptr_array_add (a,hash2);
g_print("print array value foreach..................\n");
g_ptr_array_foreach(a, (GFunc)array_print,"hello");
g_print("print list value foreach...............\n");
int j;
for(j=0;j < g_slist_length(list);j++)
{
NetList *net = g_slice_new(NetList);
net = g_slist_nth(list, j)->data;
g_print("net->stat=%s\n",net->stat);
g_print("net->name=%s\n",net->name);
g_print("net->id=%s\n",net->id);
}
while(g_slist_length(list)>0)
{
list = g_slist_remove(list,g_slist_nth(list,0)->data);
printf("g_slist_length(list)=%d",g_slist_length(list));
}
return 0;
}

浙公网安备 33010602011771号