GTK Gossip: GHashTable
来源:互联网 发布:乐器演奏软件 编辑:程序博客网 时间:2024/06/05 22:40
GHashTable可以讓您以雜湊表的方式來儲存資料,儲存時指定Key演算出Hash值以決定資料儲存位置,要取回資料,也是指定Key演算出資料儲存位置,以快速取得資料。
簡單的說,您將GHashTable當作一個有很多間房間的房子,每個房間的門有一把鑰匙,您將資料儲存至房間中時,要順便擁有一把鑰匙,下次要取回資料時,就是根據這把鑰匙取得。
您可以使用g_hash_table_new()來建立GHashTable:
GHashTable* g_hash_table_new(GHashFunc hash_func,
GEqualFunc key_equal_func);
GEqualFunc key_equal_func);
g_hash_table_new()要指定一個演算Hash值的函式,GLib提供了如g_int_hash()、g_str_hash()函式可以直接使用,您也可以自訂自己的演算Hash值的函式,例如:
guint hash_func(gconstpointer key) {
...
return ...;
}
...
return ...;
}
演算出Hash是決定儲存的位置,接下來要確認Key的相等性,GLib提供了如g_int_equal()及g_str_equal()函式可直接使用,同樣的,您也可以自訂函式:
gboolean key_equal_func(gconstpointer a, gconstpointer b) {
...
return ...;
}
...
return ...;
}
下面這個程式是個簡單的示範:
- ghashtable_demo.c
#include <glib.h>
int main(int argc, char *argv[]) {
GHashTable *hashTable = g_hash_table_new(
g_str_hash, g_str_equal);
g_hash_table_insert(hashTable, "caterpillar", "caterpillar's message!!");
g_hash_table_insert(hashTable, "justin", "justin's message!!");
g_print("%s/n", g_hash_table_lookup(hashTable, "caterpillar"));
g_print("%s/n", g_hash_table_lookup(hashTable, "justin"));
g_hash_table_destroy(hashTable);
return 0;
}
程式的執行結果如下:
caterpillar's message!!
以下則示範如何使用g_hash_table_iter_next()函式來進行GHashTable的迭代:
- ghashtable_demo.c
#include <glib.h>
int main(int argc, char *argv[]) {
GHashTableIter iter;
gpointer key, value;
GHashTable *hashTable;
hashTable = g_hash_table_new(g_str_hash, g_str_equal);
g_hash_table_insert(hashTable, "justin", "justin's message!!");
g_hash_table_insert(hashTable, "momor", "momor's message!!");
g_hash_table_insert(hashTable, "caterpillar", "caterpillar's message!!");
g_hash_table_iter_init (&iter, hashTable);
while(g_hash_table_iter_next(&iter, &key, &value)) {
g_print("key/t: %s/nvalue/t: %s/n/n", key , value);
}
g_hash_table_destroy(hashTable);
return 0;
}
程式的執行結果如下:
value : justin's message!!
key : caterpillar
value : caterpillar's message!!
key : momor
value : momor's message!!
- GTK Gossip: GHashTable
- GTK Gossip: Ubuntu 下安裝 GTK
- GTK Gossip: GTK 事件處理函式
- GTK Gossip: GtkTable
- GTK Gossip: 簡介 Glade
- GTK Gossip: GtkMessageDialog
- GTK Gossip: GtkAboutDialog
- GTK Gossip: GtkEntry
- GTK Gossip: GtkSpinButton
- GTK Gossip: GtkTextView
- GTK Gossip: GtkComboBox
- GTK Gossip: GtkNotebook
- GTK Gossip: GtkPaned
- GTK Gossip: GtkScrolledWindow
- GTK Gossip: GtkHandleBox
- GTK Gossip: GtkUIManager
- GTK Gossip: GtkProgressBar
- GTK Gossip: GtkToolBar
- 反汇编命令及elf,bin,hex之间的转换
- GTK Gossip: GArray、GPtrArray、GByteArray
- QTP10-插件破解脚本
- hangye5:2345导航将出嫁史玉柱 网址站出路大盘点
- GTK Gossip: GSList、GList
- GTK Gossip: GHashTable
- MySQL 1130 错误
- 最简单的GDI+程序代码
- GTK Gossip: GTree 與 GNode
- PHP会话控制之session--实例
- perl正则内置变量匹配
- GTK Gossip: 記憶體配置
- asp中使用OpenSchema时出现“对象或提供程序不能执行所需操作”错误的原因
- GTK Gossip: GThread