Dictionary
Dictionary ▲
Dictionary はキーとバリューのコレクションを表す
PHP の連想配列のようなイメージだが、キーとバリューの型は宣言しておく必要があり、また要素の番号を用いたアクセスはできない
中身の要素を全て確認したい場合は foreach などを用いることが多い
以下にいくつかの基本的な Dictionary の使用方法をのせておく
using System;
using System.Collections.Generic; // Dictionaryを使うには名前空間の使用を宣言する必要がある
using System.Linq; // Linqを使った結合を使用する場合に必要
public class Sample
{
public static void Main()
{
// Dictionary<Tkey, Tvalue>で宣言する
Dictionary<string, int> dict1 = new Dictionary<string, int>();
dict1.Add( "太郎", 15 );
dict1.Add( "次郎", 13 );
dict1.Add( "三郎", 8 );
// 初期化子を使う場合
Dictionary<string, int> dict2 = new Dictionary<string, int>() {
{ "雪子", 12 },
{ "月子", 10 },
{ "花子", 6 },
{ "貞子", 999 },
{ "三郎", 10 },
};
// 削除
dict2.Remove( "貞子" ); // キー名で削除する
// dict2.Clear(); 中身を空にしたいときはこちら
foreach( KeyValuePair<string, int> kvp in dict2 )
{
Console.WriteLine( kvp );
// [雪子, 12]
// [月子, 10]
// [花子, 6]
// [三郎, 10]
}
// Linqを使わない結合
Dictionary<string, int> merge = new Dictionary<string, int>();
foreach ( KeyValuePair<string, int> kvp in dict1 )
{
merge.Add( kvp.Key, kvp.Value );
}
foreach ( KeyValuePair<string, int> kvp in dict2 )
{
if ( merge.ContainsKey( kvp.Key ) )
{
// キーが重複したら無視する。これがないと重複がでた時点でエラー
continue;
}
merge.Add( kvp.Key, kvp.Value );
}
// Linqを使った結合
Dictionary<string, int> linqMerge = dict1.Concat(
dict2.Where( pair => !dict1.ContainsKey( pair.Key ) ) ) // キーの重複を避ける
.ToDictionary( pair => pair.Key, pair => pair.Value ); // Dictionaryとして出力
foreach ( KeyValuePair<string, int> kvp in linqMerge )
{
Console.WriteLine( kvp );
// [太郎, 15]
// [次郎, 13]
// [三郎, 8]
// [雪子, 12]
// [月子, 10]
// [花子, 6]
}
}
}
注意 ▲
Dictionary は foreach文によるループ中に要素の追加・削除など順序が崩れてしまう操作を行うとエラーとなってしまうので注意すること
目次