Dictionaryの学習

学習のため、スケジュール管理の部分を作ってみましょう

スケジュールのキーに日付を使ってみる

DictionaryのKey(キー)にDateTimeクラスを使って実現します

コード

// スケジュールリストを表すDictionaryを作成
var scheduleList = new Dictionary<DateTime, string>();

// スケジュールリストに要素を追加
scheduleList.Add(new DateTime(2023, 2, 1), "チームとのミーティング");
scheduleList.Add(new DateTime(2023, 2, 3), "顧客へのプレゼンテーション");
scheduleList.Add(new DateTime(2023, 2, 5), "チームビルディングイベント");

// スケジュールリストの内容を表示
foreach (var item in scheduleList)
{
    Console.WriteLine($"On {item.Key.ToString("MM/dd/yyyy")}: {item.Value}");
}

結果の表示

On 02/01/2023: チームとのミーティング
On 02/03/2023: 顧客へのプレゼンテーション
On 02/05/2023: チームビルディングイベント

スケジュールをファイルに保存・読み出ししてみる

Jsonフォーマットで簡易的に保存します

コード

名前空間の追加が必要です

using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
// Encode設定
var op = new JsonSerializerOptions
{
    // 日本語を扱う
    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
    // 改行付き表示にする
    WriteIndented = true
};

//json(テキスト)に変換する
string json = JsonSerializer.Serialize(scheduleList, op);

// jsonテキストをファイルに保存
File.WriteAllText("ScheduleList.json", json);

// ファイルから読み出す
string loadJsonScheduleList = File.ReadAllText("ScheduleList.json");

// オブジェクトに戻す
var loadScheduleList = JsonSerializer.Deserialize<Dictionary<DateTime, string>>(loadJsonScheduleList);

Console.ReadLine();

結果の表示

On 02/01/2023: チームとのミーティング
On 02/03/2023: 顧客へのプレゼンテーション
On 02/05/2023: チームビルディングイベント

ScheduleListファイルの内容

{
  "2023-02-01T00:00:00": "チームとのミーティング",
  "2023-02-03T00:00:00": "顧客へのプレゼンテーション",
  "2023-02-05T00:00:00": "チームビルディングイベント"
}

ファイルの保存先

VisualStudioのソリューションエクスプローラー

Windowsのエクスプローラー

Macのフォルダ

スケジュールの詳細を細かく設定できるようにする

DictionaryのValue(値)に自作のスケジュールクラスを使って実現します

その日のスケジュールについての詳細が記録できるようにしています
サンプルでは、次の属性を備えています
もちろん増やすこともできますよね

  • タイトル
  • 場所
  • メモ
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;

// スケジュールリストを表すDictionaryを作成
var scheduleList = new Dictionary<DateTime, Schedule>();



// スケジュールリストに要素を追加
scheduleList.Add(new DateTime(2023, 2, 1), new Schedule("チームとのミーティング", "第1会議室", "資料1が必要"));
scheduleList.Add(new DateTime(2023, 2, 3), new Schedule("顧客へのプレゼンテーション", "第2会議室", "資料2が必要"));
scheduleList.Add(new DateTime(2023, 2, 5), new Schedule("チームビルディングイベント", "第3会議室", "資料3が必要"));

// スケジュールリストの内容を表示
foreach (var item in scheduleList)
{
    Console.WriteLine($"On {item.Key.ToString("MM/dd/yyyy")}: {item.Value.Title}");
}

// Encode設定
var op = new JsonSerializerOptions
{
    // 日本語を扱う
    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
    // 改行付き表示にする
    WriteIndented = true
};

//json(テキスト)に変換する
string json = JsonSerializer.Serialize(scheduleList, op);

// jsonテキストをファイルに保存
File.WriteAllText("ScheduleList.json", json);

// ファイルから読み出す
string loadJsonScheduleList = File.ReadAllText("ScheduleList.json");

// オブジェクトに戻す
var loadScheduleList = JsonSerializer.Deserialize<Dictionary<DateTime, Schedule>>(loadJsonScheduleList);

Console.ReadLine();

internal class Schedule
{
    public Schedule(string title, string place, string memo)
    {
        Title = title;
        Place = place;
        Memo = memo;
    }

    public string Title { get; set; }
    public string Place { get; set; }
    public string Memo { get; set; }
}

結果の表示

On 02/01/2023: チームとのミーティング
On 02/03/2023: 顧客へのプレゼンテーション
On 02/05/2023: チームビルディングイベント

C#,JSON,学習

Posted by hidepon