概要
キーと値を組で格納管理したい場合、ディクショナリジェネリックオブジェクトを使用するとよいでしょう。
日常でたとえると
言葉に番号が割り振られている国語辞典。
使用に適した状況
同姓同名がいる顧客リストなど、リストでは上手く扱えないデータを格納管理したい時に使用するとよいでしょう。
サンプル
/*----------------------------------------------------
*
* 辞書(ディクショナリー)のデータライフサイクル。
*
----------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
class Sample
{
static void Main( )
{
//男性の偉人リストを作成
var man = new Dictionary<int, string>();
man.Add( 3, "坂本龍馬" );
man.Add( 8, "西郷隆盛" );
man.Add( 5, "織田信長" );
man.Add( 15, "武田信玄" );
man.Add( 33, "ガンダーラ" );
Print( "男性の偉人リスト", man );
//女性の偉人リストを作成
var women = new Dictionary<int, string>();
women.Add( 20, "紫式部" );
women.Add( 12, "ジャンヌダルク" );
women.Add( 9, "卑弥呼" );
women.Add( 14, "エカチェリーナ" );
women.Add( 22, "清少納言" );
Print( "女性の偉人リスト", women );
//偉人に性別なんて関係がない
var human = new SortedDictionary<int, string>( man );
foreach ( var d in women )
human.Add( d.Key, d.Value );
Print( "偉人リスト", human );
//ガンダーラって誰?
Console.WriteLine(
"[{0}, {1}]を削除します・・・",
33,
human[ 33 ] );
human.Remove( 33 );
//もしかしてガンジー?
human.Add( 18, "ガンジー" );
Console.WriteLine(
"[{0}, {1}]を追加しました。",
18,
human[ 18 ] );
//正式名に変更
human[ 18 ] = "マハトマ・ガンディー";
Console.WriteLine( "ガンジーを正式名に変更します。" );
Console.WriteLine();
//最終リスト
Print( "最新偉人リスト", human );
Console.ReadLine();
//終了
Console.ReadLine();
}
//辞書の内容を表示。
private static void Print(
string tile,
IDictionary<int, string> datas )
{
Console.WriteLine( "***** {0} *****", tile );
foreach ( var d in datas )
Console.WriteLine( "{0} ", d );
Console.WriteLine();
}
}
名前空間
System.Collections.Generic名前空間を参照します。LINQプログラミングのために、System.Linq名前空間も参照しましょう。
解説
値だけを扱うリストジェネリックオブジェクトでは、同じように見える値をうまく扱えません。例えば、同姓同名の人がいる場合、名前だけでは重複値となり、正しく扱えません。
そのような
重複する値が想定されるデータを扱いたい場合、データベースでやっているように、キーを別に定めて、プログラミングを行います。その時活躍するのが、ディクショナリージェネリックオブジェクト(
Dictionary)です。
ディクショナリージェネリックオブジェクト(Dictionary)は、主にキーで検索し、値を操作します。もちろん値を使っても検索できますが、元々の動機が「重複した値も分けて扱いたい」ですから、バグになる可能性が大いにあります。素直にキーを主体にデータを扱いましょう。
キーを扱う事さえ気を付ければ、さほど難しいオブジェクトではありません。有効活用しましょう。リストしか扱えない人よりも、断然表現力が高まるので、ぜひ習得しておきたいオブジェクトです。
テーマ : プログラミング
ジャンル : コンピュータ