0

在 vb.net 如果我有HashTable,key是整数并且值是 a list of integers,如何将整数附加到给定键的值,我已经尝试过,但每次我发现最后添加的整数,(列表只有最后一个添加的项目)。

这是我的代码,对象在dt哪里DataTable

Dim dt = report.getEvaluationReportByObjectiveGroupId(29)
Dim data As New Hashtable()
Dim dataEntry As DictionaryEntry

Dim res As String
For Each row As DataRow In dt.Rows
    Dim strYear = row.Item("Year")
    Dim strData = row.Item("EmpCount")


    If data.ContainsKey(strYear) Then
        Dim newCountArr As List(Of Int32) = DirectCast(data(strYear), List(Of Int32))
        '   newCountArr.AddRange(data(strYear))
        newCountArr.Add(strData)
        '  data.Remove(strYear)
        ' data.Add(strYear, newCountArr)
    Else
        Dim countArr As New List(Of Integer)
        countArr.Add(strData)
        data.Add(strYear, countArr)
    End If

    ' data.Add(strYear, strData)
Next row
4

1 回答 1

1

我建议改用强类型Dictionary(Of Int32, List(Of Int32)),它的工作原理类似。但无论如何,这是HashTable方法:

Dim table = New Hashtable
Dim list = New List(Of Int32)
For i = 1 To 999
    list.Add(i)
Next
table.Add(1, list)

' somewhere else you want to read the list for a given key (here 1) '
Dim list1 As List(Of Int32) = DirectCast(table(1), List(Of Int32))
list.Add(1000) ' add another integer to the end of the list '
' note: you don't need to add the list to the HashTable again '

编辑:既然你已经发布了你的代码,这里是更正的:

For Each row As DataRow In dt.Rows
    Dim strYear = row.Field(Of Int32)("Year")
    Dim strData = row.Field(Of Int32)("EmpCount")
    Dim list As List(Of Int32)

    If data.ContainsKey(strYear) Then
        list = DirectCast(data(strYear), List(Of Int32))
    Else
        list = New List(Of Int32)
        data.Add(strYear, list)
    End If
    list.Add(strData)
Next row
于 2012-09-17T09:12:56.697 回答