【C#】DictionaryクラスをLINQ(ForEach)で使う方法

Dictionaryクラスとは

Dictionaryクラス」では、「Key」と呼ばれるインデックス番号の代わりに使われる名前と、「Value」と呼ばれる値をセットで扱います。

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.dictionary-2?view=net-5.0

Key」と「Value」をセットで扱う配列のことを連想配列といいます。

C#でこの連想配列を扱うためのクラスが「Dictionaryクラス」です。

Dictionaryクラスでは、「Key」を使って「Value」の値を取得します(Keyの値を重複させることはできません)。

 

Dictionaryクラスの使い方

Dictionaryクラスは以下のように使用します。

Dictionary<Keyの型名, Valueの型名> オブジェクト名 = new Dictionary<Keyの型名, Valueの型名>()

Dictionaryクラスを使用するには、usingを使ってSystem.Collections.Genericクラスを呼び出しておく必要があります。

また以下のように記述することも可能です。

var オブジェクト名 = new Dictionary<Keyの型名, Valueの型名>()

今回は、DictonaryクラスをLINQのForEachを用いて実装してみます。

 

LINQとは

LINQ、ラムダ式に関しては下記の記事を参考ください。

【C#】LINQ

2021.02.21

【C#】ラムダ式

2021.02.21

 

DictionaryをLINQのForEachで使用する

KeyとValue両方を取得する方法

using System;
using System.Linq; // usingに追加
using System.Collections.Generic; // usingに追加

namespace c_dictionary
{
    class Program
    {
        static void Main(string[] args)
        {

            var character = new Dictionary<string, string>(); // Dictionaryクラスのインスタンスを生成

          // AddメソッドでKeyとValueを追加
            character.Add("ワンピース", "ルフィ");
            character.Add("ハンターハンター", "ゴン");
            character.Add("キングダム", "信");
            character.Add("弱虫ペダル", "小野田坂道");
            character.Add("ダイヤのエース", "沢村栄純");

          // LinqのForEachを使用
            character.ToList().ForEach(x =>
               Console.WriteLine($"{x.Key}の主人公は{x.Value}です。") // 文字列補間のため「$」を先頭につけます
            );
        }
    }
}

実行結果:

ワンピースの主人公はルフィです。
ハンターハンターの主人公はゴンです。
キングダムの主人公は信です。
弱虫ペダルの主人公は小野田坂道です。
ダイヤのエースの主人公は沢村栄純です。

x.Key」でKeyを取得、「x.Value」でValueを取得することができます。

また文字列補間のため、文字列の先頭に「$」をつけています。
文字列補間については下記の記事を参考ください。

【C#】$”{}”(文字列補間)とは

2021.04.25

 

Keyのみを取得する方法

using System;
using System.Linq;
using System.Collections.Generic;

namespace c_dictionary
{
    class Program
    {
        static void Main(string[] args)
        {

            var character = new Dictionary<string, string>();
            character.Add("ワンピース", "ルフィ");
            character.Add("ハンターハンター", "ゴン");
            character.Add("キングダム", "信");
            character.Add("弱虫ペダル", "小野田坂道");
            character.Add("ダイヤのエース", "沢村栄純");

            character.ToList().ForEach(x =>
               Console.WriteLine($"一度は読んで欲しい漫画は「{x.Key}」です")
            );
        }
    }
}

実行結果:

一度は読んで欲しい漫画は「ワンピース」です
一度は読んで欲しい漫画は「ハンターハンター」です
一度は読んで欲しい漫画は「キングダム」です
一度は読んで欲しい漫画は「弱虫ペダル」です
一度は読んで欲しい漫画は「ダイヤのエース」です

 

Valueのみを取得する方法

using System;
using System.Linq;
using System.Collections.Generic;

namespace c_dictionary
{
    class Program
    {
        static void Main(string[] args)
        {

            var character = new Dictionary<string, string>();
            character.Add("ワンピース", "ルフィ");
            character.Add("ハンターハンター", "ゴン");
            character.Add("キングダム", "信");
            character.Add("弱虫ペダル", "小野田坂道");
            character.Add("ダイヤのエース", "沢村栄純");

            character.ToList().ForEach(x =>
               Console.WriteLine($"人気漫画の主人公の名前は「{x.Value}」です")
            );
        }
    }
}

実行結果:

人気漫画の主人公の名前は「ルフィ」です
人気漫画の主人公の名前は「ゴン」です
人気漫画の主人公の名前は「信」です
人気漫画の主人公の名前は「小野田坂道」です
人気漫画の主人公の名前は「沢村栄純」です

上記のように、LINQのForEachを用いることにより、「Key」と「Value」を簡単に取得することができます。

 

おすすめ書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)

■C#をある程度学習した方向け
基礎からしっかり学ぶCの教科書 改訂新版 (マイクロソフト関連書)

独習C 新版

Effective C 6.0/7.0