C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 147 を表示中)
■85779 / )  Re[5]: csvデータへの追記
□投稿者/ WebSurfer (1360回)-(2017/11/23(Thu) 13:18:20)
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)())

        ' ②, ③ 文字列を取得して追記(分かりやすくするため 2 行に分けた)
        Dim value As List(Of String) = list("B")
        value.Add("10")

        ' ④ これを何回も繰り返し
        list("A").Add("1")
        list("B").Add("20")
        list("B").Add("10")
        list("C").Add("15")

        ' ⑤ 結果を書き出し
        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> を使うとか別の方法
を考えた方が良いかもしれません。

返信 編集キー/


管理者用

- Child Tree -