Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
辞書.Keys / Values / foreach
『Dictionary<TKey, TValue>』のキー一覧を取得する『Keys』、値一覧を取得する『Values』、そして全要素を順番に処理する『foreach』による列挙の使い方です。
構文
using System.Collections.Generic;
Dictionary<TKey, TValue> 辞書 = new Dictionary<TKey, TValue>();
// キーの一覧を取得します。
ICollection<TKey> キー一覧 = 辞書.Keys;
// 値の一覧を取得します。
ICollection<TValue> 値一覧 = 辞書.Values;
// キーと値のペアを foreach でループします。
foreach (KeyValuePair<TKey, TValue> ペア in 辞書)
{
// ペア.Key でキー、ペア.Value で値にアクセスします。
}
メソッド一覧
| プロパティ / 構文 | 概要 |
|---|---|
| Keys | 辞書に含まれるすべてのキーを ICollection<TKey> として返します。 |
| Values | 辞書に含まれるすべての値を ICollection<TValue> として返します。 |
| foreach (KeyValuePair<K,V> pair in 辞書) | 辞書の全要素をキーと値のペアとして順番に列挙します。 |
| Count | 辞書に格納されている要素数を返します。 |
サンプルコード
using System;
using System.Collections.Generic;
// 国名と首都の辞書を作成します。
Dictionary<string, string> 首都 = new Dictionary<string, string>
{
{ "日本", "東京" },
{ "フランス", "パリ" },
{ "ドイツ", "ベルリン" }
};
// Keys でキー一覧を取得してループします。
Console.WriteLine("--- 国名一覧 ---");
foreach (string 国 in 首都.Keys)
{
Console.WriteLine(国);
}
// Values で値一覧を取得してループします。
Console.WriteLine("--- 首都一覧 ---");
foreach (string 都市 in 首都.Values)
{
Console.WriteLine(都市);
}
// KeyValuePair でキーと値を同時に取得します。
Console.WriteLine("--- 国名と首都 ---");
foreach (KeyValuePair<string, string> ペア in 首都)
{
Console.WriteLine($"{ペア.Key} の首都は {ペア.Value} です。");
}
// C# 7.0 以降はタプル分解で簡潔に書けます。
Console.WriteLine("--- タプル分解 ---");
foreach ((string 国名, string 都市名) in 首都)
{
Console.WriteLine($"{国名} → {都市名}");
}
概要
『Keys』と『Values』が返すコレクションは辞書本体への参照です。辞書の内容が変わると、取得済みのコレクションにも変更が反映されます。foreach ループ中に辞書を追加・削除すると InvalidOperationException がスローされます。ループ中に変更が必要な場合は、事前に ToList() でスナップショットを取得してください。
列挙順は .NET の実装によって異なる場合があります。挿入順を保証したい場合は C# 8.0 以降で SortedDictionary<TKey, TValue> の利用を検討してください。辞書への要素の追加・削除については辞書.Add() / Remove() / Clear()を、安全な値の取得については辞書.TryGetValue() / ContainsKey()をご確認ください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。