关键词搜索

源码搜索 ×
×

vb.net 教程 1-12 Hashtable

发布2021-02-08浏览717次

详情内容

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

HashTable 是表示根据键的哈希代码进行组织的键值对(Key/Value)的集合。
首先需要明白的是“键值对”(Key/Value)
例如:学生学号A20190902对应的一个学生“张三”我们可以理解为
Key=A20190902
Value=张三
由于Key相当于索引,所以不能重复,但是值可以重复。
比如李四有很多个银行卡,银行卡的卡号就是Key,这个是不重复的,但是对应的人Value都是李四。
其次,HashTable是一个集合,包含了很多的键值对(Key/Value)。

本节内容将用示例方式讲解HashTable增、删、改、枚举、查找操作。
设计窗口如下:

在这里插入图片描述

定义窗体级变量

  Dim myHashTab As Hashtable

    当窗体载入时候:

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    myHashTab = New Hashtable()
    End Sub

    向myHashTab增加键值对:

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    myHashTab.Add(txtKey.Text, txtValue.Text)
    End Sub

    需要注意的是Add方法:
    Public Overridable Sub Add ( key As Object, value As Object )
    接受的两个参数都是Object ,也就是任意变量都可以添加为Key或者Value。为了方便掌握,本节内容全部简vb.net教程化为String类型。
    当添加了键值对后,采用以下三种方法可以枚举出键值对:

        '枚举值
        Private Sub showAll_Click(sender As Object, e As EventArgs) Handles showAll.Click
            Dim info As String = ""
            info &= "键值对个数:" & myHashTab.Count & ControlChars.CrLf
     
            For Each singleHash As DictionaryEntry In myHashTab
                info &= singleHash.Key & ":" & singleHash.Value & ":" & singleHash.GetHashCode.ToString("X") & ControlChars.CrLf
                singleHash.Key = "111" & singleHash.Key
                singleHash.Value = "https://files.jxasp.com/image/222" & singleHash.Key
            Next
            info &= "===============" & ControlChars.CrLf
     
            For Each singleKey As String In myHashTab.Keys
                info &= singleKey & ":" & myHashTab(singleKey) & ControlChars.CrLf
            Next
            info &= "===============" & ControlChars.CrLf
     
            Dim myHashTabEnum As IDictionaryEnumerator = myHashTab.GetEnumerator()
            Dim dentry As DictionaryEntry
     
            While myHashTabEnum.MoveNext()
                dentry = CType(myHashTabEnum.Current, DictionaryEntry)
                info &= dentry.Key & ":" & dentry.Value & ControlChars.CrLf
            End While
     
            txtInfo.Text = info
        End Sub
    按Key查找键值对:
    
        '查找键Key
        Private Sub btnFindKey_Click(sender As Object, e As EventArgs) Handles btnFindKey.Click
            If myHashTab.ContainsKey(txtFind.Text) Then
                txtInfo.Text = "找到Key:" & txtFind.Text & " 对应值:" & myHashTab(txtFind.Text)
            Else
                txtInfo.Text = "未找到Key:" & txtFind.Text
            End If
        End Sub
    查找Value是否存在:
    
        '查找值Value
        Private Sub btnFindValue_Click(sender As Object, e As EventArgs) Handles btnFindValue.Click
            If myHashTab.ContainsValue(txtFind.Text) Then
                txtInfo.Text = "找到Value:" & txtFind.Text 
            Else
                txtInfo.Text = "未找到Value:" & txtFind.Text
            End If
        End Sub
    删除某个键值对:
    
        '删除键值对
        Private Sub btnDel_Click(sender As Object, e As EventArgs) Handles btnDel.Click
            If myHashTab.ContainsKey(txtFind.Text) Then
                myHashTab.Remove(txtFind.Text)
            End If
        End Sub
    修改Value值:
    
        '修改值Value
        Private Sub btnEdit_Click(sender As Object, e As EventArgs) Handles btnEdit.Click
            If myHashTab.ContainsKey(txtFind.Text) Then
                myHashTab(txtFind.Text) = txtEdit.Text
            End If
        End Sub
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    另外,清除所有键值对:

       myHashTab.Clear()
    

      由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

      相关技术文章

      点击QQ咨询
      开通会员
      返回顶部
      ×
      微信扫码支付
      微信扫码支付
      确定支付下载
      请使用微信描二维码支付
      ×

      提示信息

      ×

      选择支付方式

      • 微信支付
      • 支付宝付款
      确定支付下载