代码之家  ›  专栏  ›  技术社区  ›  izidor

如何创建不区分大小写的glib哈希表?

  •  1
  • izidor  · 技术社区  · 16 年前

    有没有简单的方法可以创建不区分大小写(string->string)的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");
    

    我认为问题只在于散列函数和比较函数的定义。但是,我不知道应该使用哪些函数。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Dirk is no longer here    16 年前

    你为什么不把钥匙换成 tolower() ?这样键就被标准化了,因此您的哈希表也将被标准化。

        2
  •  4
  •   Steve Jessop    16 年前

    为提供您自己的相等和哈希函数 g_hash_table_new 而不是 g_str_equal g_str_hash .

    编写散列的最简单方法可能是为 格斯特斯特哈什 ,但在读取每个字符时,在继续之前将其推到小写。但是您可以使用任意数量的字符串哈希算法,只需调整一个,以确保只有大小写不同的两个字符串将产生相同的哈希值。

    只要您只需要担心ASCII字符串,就可以几乎(但不完全)使用 g_ascii_strcasecmp 对于相等函数。您需要调整返回值。如果要支持更大的字符集,请对该集使用不区分大小写的比较。

    推荐文章