|
■No85778 (asa さん) に返信
Dictionary(Of String, List(Of String)) を使って、"A" 〜 "D" を key に、"10" とか "1" を
value に追加していくという方法はいかがですか?
具体例(あくまで例)は以下の通りです。C# で書いて変換サービスのサイトで VB.NET に変換し
たので VB.NET の書き方としては変なところがあるかも。でも、期待通りの結果になることは確
認済みです。
Option Strict On
Module Module1
Sub Main()
' @ マスターデータをコピー
Dim list As New Dictionary(Of String, List(Of String))()
list.Add("A", New List(Of String)())
list.Add("B", New List(Of String)())
list.Add("C", New List(Of String)())
list.Add("D", New List(Of String)())
' A, B 文字列を取得して追記(分かりやすくするため 2 行に分けた)
Dim value As List(Of String) = list("B")
value.Add("10")
' C これを何回も繰り返し
list("A").Add("1")
list("B").Add("20")
list("B").Add("10")
list("C").Add("15")
' D 結果を書き出し
For Each kvp As KeyValuePair(Of String, List(Of String)) In list
Dim record As String = kvp.Key + ","
For Each s As String In kvp.Value
record += s & Convert.ToString(",")
Next
record = record.TrimEnd(New Char() {","c})
record += Environment.NewLine
Console.Write(record)
Next
' 結果は:
' A,1
' B,10,20,10
' C,15
' D
End Sub
End Module
コメントの「結果は:」に書いたように foreach で取得して Add した順番にはなっていますが、
必ず Add した順番になるということは、少なくとも MSDN ライブラリの記述には見つけられませ
んでした。
なので、順序が重要ということであれば、SortedDictionary<TKey, TValue> を使うとか別の方法
を考えた方が良いかもしれません。
|