0

vb.netHashTableで、keyが整数で、値がである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

I would suggest to use the strongly typed Dictionary(Of Int32, List(Of Int32)) instead, it works similar. But anyway, here's the HashTable approach:

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 '

Edit: Since you've posted your code, here's the corrected:

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 に答える