GetEnumerator()について

[戻る]
プログラム未熟者 2008/07/07(月) 14:21:20
.NET VC++ 2005です。

GetEnumerator()を使用してハッシュテーブル内のデータを取得する
処理なのですがGetEnumerator()を使用して値を取得すると配列の要
素順ではなく取得されてしまいます。配列の先頭から取得するにはど
のようにすれば良いでしょうか?

IEnumrator^ a = test->GetEnumerator();

while(a->MoveNext())
{


}

επιστημη [HomePage] 2008/07/07(月) 14:44:22
> 配列の要素順ではなく取得されてしまいます。

アタリマエです。ハッシュ表なんだから。

> 配列の先頭から取得するにはどのようにすれば良いでしょうか?

できません。

プログラム未熟者 2008/07/07(月) 14:47:30
>επιστημηさん

ご意見ありがとうございます。出来ないんですか(><)
何か変わりの方法を考えるしかないでしょうか?

YuO [E-Mail] 2008/07/07(月) 14:49:17
ハッシュテーブルは配列ではないですし,そもそも順序づけなされていないものです。
# 理由は,ハッシュの仕組みを勉強してください。

順序が重要なのであれば,ListやLinkedListを使って自分で制御するか,
SortedDictionaryやSortedListのような,ソートされることが定まっているものを使って
ください。

プログラム未熟者 2008/07/07(月) 14:55:26
>YuOさん

貴重な意見ありがとうございます。

GetEnumeratorですがkeyで値をひっぱってくることは可能でしょうか?
順番に取得できなくてもkeyで目的の値がひっぱれれば代替できそうな
感じです。

επιστημη [HomePage] 2008/07/07(月) 14:58:47
えーと、ぶっちゃけナニがしたいんですか?
挿入したのと同じ順序で取り出したいってことですか?

プログラム未熟者 2008/07/07(月) 15:04:37
>επιστημη

ハッシュテーブルに3つの値を格納(順番は固定)していてそれを
格納されてる順番にコンボボックスに表示させたいだけなのです
が3つしか値がないのでKeyから直接値をひっぱってコンボボック
スに追加すれば同じような意味合いになると思いました。

επιστημη [HomePage] 2008/07/07(月) 15:14:08
    Dictionary<String^,String^> dic;
    dic.Add(L"one",L"いち");
    dic.Add(L"two",L"に");
    dic.Add(L"three",L"さん");
    dic.Add(L"four",L"し");
    dic.Add(L"five",L"ご");
    for each ( String^ key in gcnew array<String^> { L"one", L"two", L"three", 
L"four", L"five" }) {
      Console::WriteLine("dic[{0}] = {1}", key, dic[key]); // operator[]で表引
き
    }

プログラム未熟者 2008/07/07(月) 17:24:22
[[解決]]
>επιστημηさん

サンプルプログラムありがとうございました。
意図した処理を記述することが出来ました。

ハッシュテーブルについて知識がまだ乏しいので
もっと調べてみようと思います。

古いスレッドには追加発言できません。