Home > .NET Framework >


Visual C++ の Hashtable

google で参考になるコードを探したが、いいのが無い。
調べ方が悪いのかな

コードのほとんどをネットからのコピペで作ってる俺には辛いんだぜ。

Hashtable^ ht = gcnew Hashtable();
ht->Add("ringo", "apple");
ht->Add("mikan", "orange");

Debug::WriteLine("for each で列挙");
for each (DictionaryEntry^ item in ht) {
	Debug::WriteLine(item->Value);
	Debug::WriteLine(item->Value->ToString());
	Debug::WriteLine(safe_cast<String^>(item->Value));
}

Debug::WriteLine("Enumerator で列挙");
IEnumerator^ en = ht->GetEnumerator();
while(en->MoveNext()) {
	Debug::WriteLine(safe_cast<DictionaryEntry^>(en->Current)->Value);
	Debug::WriteLine(safe_cast<DictionaryEntry^>(en->Current)->Value->ToString());
	Debug::WriteLine(safe_cast<String^>(safe_cast<DictionaryEntry^>(en->Current)->Value));
}

Debug::WriteLine("key で取得");
Debug::WriteLine(ht["ringo"]);
Debug::WriteLine(ht["mikan"]);

うーん、例が悪いな。
Debug::WriteLine は引数のオブジェクトの ToString メソッドの値をトレースするそうだから、上の例に限っては Debug::WriteLine(item->Value); みたいなことが許されるけどさ。

実際に Hashtable を使う場合は、キャストして使うはずだよね。
なんかこのキャスト回りくどいような
もっといい書き方があるんだろうな
ラッパー作るとか、そんな感じなのか?

まぁ動けばいいか

あ、それと。 格納された順番と、列挙される順番って全然一致しないのね。
順番は保証しないと言いつつ実はちゃんと格納順で列挙してくれるパターンかと思いきや。
いじわる。

コメント : 0件

コメント投稿

トラックバック : 0件

このページへのトラックバックURL
http://www.sweetwarp.com/85.html/trackback

Home > .NET Framework >

購読用フィード