我正在嘗試將資料表轉換為字典。表格格式如下:
ValueID | DependentValueID | DependencyDescription
__________________________________________________
A | a | some text
A | b | some text
B | c | some text
B | d | some text
B | e | some text
...
每個物件有 3 個屬性:
- 值ID
- 依賴值ID
- 依賴描述
字典格式如下:
(Key) | (Value)
_______________
A | {
| [
| ValueID = A
| DependentValueID = a
| DependencyDescription = "some text"
| ],
| [
| ValueID = A
| DependentValueID = b
| DependencyDescription = "some text"
| ],
| }
-----------------------------------------------
B | {
| [
| ValueID = B
| DependentValueID = c
| DependencyDescription = "some text"
| ],
| [
| ValueID = B
| DependentValueID = d
| DependencyDescription = "some text"
| ],
| [
| ValueID = B
| DependentValueID = e
| DependencyDescription = "some text"
| ]
| }
...
我寫的代碼來做到這一點:
Private Sub MySub()
' Declare variables and fill datatables
If DependenciesDataTable IsNot Nothing AndAlso DependenciesDataTable.Rows.Count > 0 Then
For i As Integer = 0 To DependenciesDataTable.Rows.Count - 1
DependenciesObject.ValueID = DependenciesDataTable.Rows(i).Item("ValueID").ToString
DependenciesObject.DependentValueID = DependenciesDataTable.Rows(i).Item("DependentValueID").ToString
DependenciesObject.DependencyDescription = DependenciesDataTable.Rows(i).Item("DependencyDescription").ToString
If i > 0 Then
If DependenciesDataTable.Rows(i).Item("ValueID").ToString.Equals(DependenciesDataTable.Rows(i - 1).Item("ValueID").ToString) Then
DependenciesObject.Add(DependenciesObject)
Else
DependenciesDictionary.Add(DependenciesDataTable.Rows(i - 1).Item("ValueID").ToString, DependenciesObject)
DependenciesObject = New List(Of Object)
DependenciesObject.Add(DependenciesObject)
End If
ElseIf i = 0 Then
DependenciesObject.Add(DependenciesObject)
End If
If i = DependenciesDataTable.Rows.Count - 1 Then
DependenciesObject.Add(DependenciesObject)
DependenciesDictionary.Add(DependenciesDataTable.Rows(i).Item("ValueID").ToString, DependenciesObject)
DependenciesObject = New List(Of Object)
End If
Next
End If
End Sub
雖然這有效,但我知道這是一個低于標準的解決方案,因為我是一名初級開發人員。我想就如何改進我處理這個問題的方法提出一些建議。
uj5u.com熱心網友回復:
我看到這dependenciesObject是一個List(Of Object),但為什么呢?使用類,甚至像元組這樣更臨時的東西......我的解決方案將使用一個類來保持你的依賴
Public Class Dependency
Public Property ValueID As String
Public Property DependentValueID As String
Public Property DependencyDescription As String
End Class
然后使用 LINQ,我們可以從表中選擇到一個IEnumerable(Of Dependency).
Dim dependencies = DependenciesDataTable.Select().Select(Function(row) New Dependency With {.ValueID = row("ValueID"), .DependentValueID = row("DependentValueID"), .DependencyDescription = row("DependencyDescription")})
然后通過 ValueID 屬性對結果進行分組,并選擇到字典中
Dim dependenciesDictionary = dependencies.GroupBy(Function(d) d.ValueID).ToDictionary(Function(g) g.Key, Function(g) g.Select(Function(v) v).ToList())
你最終會得到一個 Dictionary(Of String, List(Of Dependency))
并將它們列印出來以確保
For Each kvp In dependenciesDictionary
Console.WriteLine($"Key: {kvp.Key}")
For Each v In kvp.Value
Console.WriteLine($"{vbTab}ValueID: {v.ValueID}, DependentValueID: {v.DependentValueID}, DependencyDescription: {v.DependencyDescription}")
Next
Next
Key: A
ValueID: A, DependentValueID: a, DependencyDescription: 一些文本
ValueID: A, DependentValueID: b, DependencyDescription:一些文本
Key: B
ValueID: B, DependentValueID: c, DependencyDescription:一些文本
ValueID: B, DependentValueID: d, DependencyDescription:一些文本
ValueID:B, DependentValueID:e,DependencyDescription:一些文本
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373958.html
