HashTable用法(二)

      上一篇博客中我们介绍了HashTable的一些简单用法,其中提到HashTable的Key值是区分大小写的,这样在合作

开发的时候就会出现很多问题,只要一不留神就会出错,下面我们介绍一下如何使HashTable得Key值不区分大小

写。正常情况下:

Dim oHash As New Hashtable() 
 

 Dim bIsFind As Boolean 

oHash.Add("A", "ValueA")  

 oHash.Add("B", "ValueA")  

 oHash.Add("C", "ValueA")  

 bIsFind = oHash.Contains("a") '鍵值 "a" 不存在  

 bIsFind = oHash.Contains("A") '鍵值 "A" 存在 


     

      最常用的方法就是在HashTable的加入/移除时先将Key值全部转换为小写(或大写),而进行判断时也将Key值

同样转换为小写(或大写)。

Dim oHash As New Hashtable()  

Dim bIsFind As Boolean 
 oHash.Add("A".ToLower, "ValueA")  

oHash.Add("B".ToLower, "ValueA")  

 oHash.Add("C".ToLower, "ValueA")  

bIsFind = oHash.Contains("a".ToLower) '鍵值 "a" 存在  

 bIsFind = oHash.Contains("A".ToLower) '鍵值 "A" 存在 

        上述方式是可行的,就是有点麻烦,尤其是像我这次一开始没有注意这个问题,修改起来就更复杂了,更好的方

法就是让Hashtable自己处理,而我们不用去区分大小写,这就用到Hashtable的一个建构函数,如下:

Public Sub New ( _  

    equalityComparer As IEqualityComparer _  


     

 

     这样我们只要写一个实现IEqualityComparer的类来做Key值大小比对可以了。

Public Class THashKeyComparer  

     Implements IEqualityComparer  

   

     Public Function Equals1(ByVal x As Object, ByVal y As Object) _  

        As Boolean Implements IEqualityComparer.Equals  

       Return (CStr(x).ToLower = CStr(y).ToLower)  

    End Function 

  

  Public Function GetHashCode1(ByVal obj As Object) _  

       As Integer Implements IEqualityComparer.GetHashCode  

        Return obj.ToString().ToLower().GetHashCode()  

    End Function 
 End Class 

      
      当我们实例化Hashtable时,只需要使用自定义的类来初始化Hashtable就可以了!
Dim oHash As New Hashtable(New THashKeyComparer())  

 Dim bIsFind As Boolean  

oHash.Add("A", "ValueA")  

 oHash.Add("B", "ValueA")  

 oHash.Add("C", "ValueA")  

 bIsFind = oHash.Contains("a") '鍵值 "a" 存在  

 bIsFind = oHash.Contains("A") '鍵值 "A" 存在 

      注:如果把添加Key/Value值放到了循环里面,每次执行完之后记得调用:oHash.Clear()方法,清楚Hashtable的所有Key/Value。
        这次开发的时候,因为只有我用到了Hashtable,所以跟大家交互的时候出现了很多问题,第一种方式转换大小写没有问题,第二种方式用C#没有实现,正在研究中,大家要是有好的方式,欢迎多交流!!!
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值