コレクションを利用しよう (5/6)
作成:2014-03-08 10:02
更新:2014-03-08 10:02
更新:2014-03-08 10:02
■キー/値をまとめて処理するには?
先のサンプルでforeachによる繰り返しを使った例を挙げていなかったのには理由があります。Hashtable/Dictionaryでは、「全部の要素を繰り返し処理する」という場合、ちょっと面倒なことになるからです。
ArrayList/Listは、基本的に配列と同じですから、foreachで順番に値を取り出し処理すればOKでした。が、Hashtable/Dictionaryは配列とは内容が異なります。インデックスで番号を割り振って値を順番に整理してはいません。キーというものを使って整理していますから、値は順序付けて管理されていないのです。
ではどうするのか。まず考えつくのは、「キーや値をまとめて取り出す」というものでしょう。これには以下のようなプロパティが使えます。
●キーをまとめて取り出す
●値をまとめて取り出す
これらで取り出されるのは、ICollectionというものです。これはコレクション関係のクラスに組み込まれているインターフェイスで、コレクションとしての機能全般を持っています。keys/valuesで取り出されたコレクションは、ArrayListなどと同じ感覚で処理することができます。
もう1つは「foreachで値を取り出す」やり方です。なんだ、foreachが使えるんじゃないか、と思った人。そうなんですが、しかし取り出されるのはキーではありません。もちろん、値でもありません。それは「DictionaryEntry」というクラスのインスタンスなのです。
このDictionaryEntryは、Hashtable/Dictionayに保管されている値のセット(キーと値をまとめたもの。「エントリー」と呼ばれます)です。このEictionaryEntryから、そのエントリーのキーと値を取り出すことができます。
●DictionaryEntryのキーと値のプロパティ
foreachでDictionaryEntryを取り出し、そこからkeyやvalueを取り出して処理していけば、すべての要素を処理することができます。実際の利用例を下にあげておきましょう。Hashtable/Dictionaryの処理の基本がこれでわかるでしょう。
ArrayList/Listは、基本的に配列と同じですから、foreachで順番に値を取り出し処理すればOKでした。が、Hashtable/Dictionaryは配列とは内容が異なります。インデックスで番号を割り振って値を順番に整理してはいません。キーというものを使って整理していますから、値は順序付けて管理されていないのです。
ではどうするのか。まず考えつくのは、「キーや値をまとめて取り出す」というものでしょう。これには以下のようなプロパティが使えます。
●キーをまとめて取り出す
変数 = 《Hashtable/List》.keys;
●値をまとめて取り出す
変数 = 《Hashtable/List》.values;
これらで取り出されるのは、ICollectionというものです。これはコレクション関係のクラスに組み込まれているインターフェイスで、コレクションとしての機能全般を持っています。keys/valuesで取り出されたコレクションは、ArrayListなどと同じ感覚で処理することができます。
■DictionaryEntryについて
もう1つは「foreachで値を取り出す」やり方です。なんだ、foreachが使えるんじゃないか、と思った人。そうなんですが、しかし取り出されるのはキーではありません。もちろん、値でもありません。それは「DictionaryEntry」というクラスのインスタンスなのです。
このDictionaryEntryは、Hashtable/Dictionayに保管されている値のセット(キーと値をまとめたもの。「エントリー」と呼ばれます)です。このEictionaryEntryから、そのエントリーのキーと値を取り出すことができます。
●DictionaryEntryのキーと値のプロパティ
変数 = 《DictionaryEntry》.key;
変数 = 《DictionaryEntry》.value;
foreachでDictionaryEntryを取り出し、そこからkeyやvalueを取り出して処理していけば、すべての要素を処理することができます。実際の利用例を下にあげておきましょう。Hashtable/Dictionaryの処理の基本がこれでわかるでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
using System; using System.Collections; namespace MyCLIApp { class Program { public static void Main(string[] args) { Hashtable table = new Hashtable(); table.Add("taro","taro@yamada.com"); table.Add("hanako","hanako@flower.com"); table.Add("tuyano","tuyano@syoda.com"); table["tuyano"] = "syoda@tuyao.com"; foreach(DictionaryEntry entry in table){ Console.WriteLine(entry.Key + ":" + entry.Value); } Console.ReadKey(true); } } }
※関連コンテンツ