【C#】Dictionary(ディクショナリ)をCSV形式で保存する方法

2024年8月28日

C#のディクショナリをCSV形式で保存し、再び読み込む手順を説明します。この資料では、具体的なコード例を提供します。

前提条件

基本的なC#プログラミングの知識があること。

ディクショナリの作成

var dictionary = new Dictionary<string, int>
{
    { "Apple", 1 },
    { "Banana", 2 },
    { "Cherry", 3 }
};

ディクショナリをCSVに変換して保存

ディクショナリをCSV形式に変換し、ファイルに保存します。

using System;
using System.Collections.Generic;
using System.IO;

class Program
{
    static void Main()
    {
        // ディクショナリの作成
        var dictionary = new Dictionary<string, int>
        {
            { "Apple", 1 },
            { "Banana", 2 },
            { "Cherry", 3 }
        };

        // CSVに変換して保存
        using (var writer = new StreamWriter("dictionary.csv"))
        {
            foreach (var kvp in dictionary)
            {
                writer.WriteLine($"{kvp.Key},{kvp.Value}");
            }
        }

        Console.WriteLine("CSVを保存しました。");
    }
}

StreamWriterを使用して直接ファイルに書き込む方法と、StringBuilderを使用して文字列を一旦構築してからファイルに書き込む方法を比較すると、それぞれにメリットとデメリットがあります。以下にその比較を説明します。

1. StreamWriterを使用した方法

using (var writer = new StreamWriter("dictionary.csv"))
{
    foreach (var kvp in dictionary)
    {
        writer.WriteLine($"{kvp.Key},{kvp.Value}");
    }
}

メリット

  • メモリ効率が良い: データが非常に大きい場合でも、一度にすべてのデータをメモリに保持する必要がないため、メモリ使用量が少なくて済みます。
  • パフォーマンス: すぐにファイルに書き込むため、実行速度が速いです。

デメリット

  • 柔軟性の欠如: 途中で生成された文字列を操作するのが難しくなります。例えば、ファイルに書き込む前に追加の処理を行う場合などです。
  • I/O操作: ファイルへの書き込みはI/O操作であり、処理がやや遅くなる可能性があります。

2. StringBuilderを使用した方法

var stringBuilder = new StringBuilder();
foreach (var kvp in dictionary)
{
    stringBuilder.AppendLine($"{kvp.Key},{kvp.Value}");
}
File.WriteAllText("dictionary.csv", stringBuilder.ToString());

メリット

  • 柔軟性: すべてのデータがメモリに保持されているため、ファイルに書き込む前に文字列を操作できます。例えば、追加のフォーマットやデータの操作が容易です。
  • 一括書き込み: 最終的に一括してファイルに書き込むため、ディスクI/Oの頻度が少なくなります。

デメリット

  • メモリ使用量: すべてのデータをメモリに保持するため、大量のデータを扱う場合、メモリ使用量が増加します。
  • パフォーマンスStreamWriterと比べてメモリにデータを保持する分、実行速度が遅くなる可能性があります。

結論

  • 小規模なデータStringBuilderを使用して柔軟にデータを操作したい場合に適しています。
  • 大規模なデータ: メモリ使用量を抑え、即座にファイルに書き込む必要がある場合は、StreamWriterの使用が適しています。

状況に応じて使い分けることが大切です。

CSVファイルからディクショナリに読み込む

CSVファイルを読み込み、ディクショナリにデータを再構築します。

using System;
using System.Collections.Generic;
using System.IO;

class Program
{
    static void Main()
    {
        // CSVファイルから読み込み
        var dictionary = new Dictionary<string, int>();

        foreach (var line in File.ReadLines("dictionary.csv"))
        {
            var parts = line.Split(',');
            if (parts.Length == 2 && int.TryParse(parts[1], out int value))
            {
                dictionary[parts[0]] = value;
            }
        }

        // ディクショナリの内容を表示
        foreach (var kvp in dictionary)
        {
            Console.WriteLine($"{kvp.Key}: {kvp.Value}");
        }
    }
}

まとめ

この技術資料では、C#のディクショナリをCSV形式で保存し、再びディクショナリに読み込む方法を説明しました。CSV形式は、テキストファイルとしてデータを保存・読み込むのに非常にシンプルで、汎用性のある形式です。このサンプルコードを通じて、ディクショナリのデータをシリアライズ・デシリアライズする方法を学ぶことができました。

C#

Posted by hidepon