有没有什么简单的方法可以创建不区分大小写(字符串 -> 字符串)的 Glib 哈希表?
结果应该是这样的:
GHashTable *table;
//there should be definition of table
g_hash_table_insert(table, "KeY", "Something"); //insert
//every command should return the line in table
g_hash_table_lookup(table, "Key");
g_hash_table_lookup(table, "KEY");
g_hash_table_lookup(table, "key");
g_hash_table_lookup(table, "KeY");
我认为问题只在于散列函数和比较函数的定义。但是,我不知道应该使用哪些功能。
最佳答案
向 g_hash_table_new
提供您自己的相等和哈希函数,而不是 g_str_equal
和 g_str_hash
。
可能编写散列的最简单方法是复制一份 g_str_hash
的源代码,但在读取每个字符时,在继续之前将其转换为小写。但是您可以使用任意数量的字符串散列算法,只需调整一个以确保仅大小写不同的两个字符串将产生相同的散列值。
只要您只需要担心 ASCII 字符串,您几乎(但不完全)可以使用 g_ascii_strcasecmp
作为相等函数。您需要调整返回值。如果您想支持更大的字符集,请对该集使用不区分大小写的比较。
关于c - 如何创建不区分大小写的 Glib 哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1249859/