15

を返すプロパティがありますHashTable。プロパティをリファクタリングせずにソートしたいと思います。ご注意ください: 私は別のタイプを返品したくありません. コード:

    /// <summary>
    /// All content containers.
    /// </summary>
    public Hashtable Containers
    {
        get
        {
            Hashtable tbl = new Hashtable();
            foreach (Control ctrl in Form.Controls)
            {
                if (ctrl is PlaceHolder)
                {
                    tbl.Add(ctrl.ID, ctrl);
                }
                // Also check for user controls with content placeholders.
                else if (ctrl is UserControl)
                {
                    foreach (Control ctrl2 in ctrl.Controls)
                    {
                        if (ctrl2 is PlaceHolder)
                        {
                            tbl.Add(ctrl2.ID, ctrl2);
                        }
                    }
                }
            }

            return tbl;
        }
    }
4

12 に答える 12

18

ハッシュテーブルは、キーを値にマッピングすることで機能します。このマッピングでは、キーが特定の順序でソートまたは格納されないという概念が暗示されています。

しかし、あなたは見てみることができますSortedDictionary<K,V>

于 2009-03-24T00:46:44.717 に答える
9

もう 1 つのオプションは、既に行っているようにハッシュ テーブルを作成し、次に単純にキーから並べ替えられたセットを作成することです。必要に応じて、ハッシュ テーブルから対応する値を取得して、その並べ替えられたキー セットを反復処理できます。

于 2009-03-24T01:45:51.827 に答える
7

lubos の言うとおりです。HashTable を並べ替えることはできません。できれば、それは HashTable ではありません。HashTable を列挙し、列挙を並べ替えることができます。しかし、それは非常に遅いでしょう。代わりにa を使用する方がはるかに優れていますSortedDictionary

于 2009-03-24T00:45:46.963 に答える
3

申し訳ありませんが、ハッシュテーブルを並べ替えることはできません。ソート可能なコレクションを使用するには、コードをリファクタリングする必要があります。

于 2009-03-24T00:44:27.200 に答える
1

ハッシュテーブルはソートできないと確信しています... ;)

ウィキペディア ハッシュ テーブル

于 2009-03-24T00:45:00.320 に答える
1

ハッシュ テーブル以外のものを返す必要があります。あなたがすでに理解していると主張することを繰り返すつもりはありませんが、設計のどの部分でも、ソートされたオブジェクトをハッシュテーブルで返す必要があるかどうかを再考する必要があります。

于 2009-03-24T00:53:21.347 に答える
1

正確にはC#の答えではありませんが、何かを作ることができると確信しています.

Perl では、ディスプレイへの出力に使用するハッシュ テーブルを「ソート」するのが一般的です。

例えば:

print "Items: ";
foreach (sort keys %items) {
    print $_, '=', $items{$_}, ' ';
}

ここでの秘訣は、Perl はハッシュをソートせず、コピーされたハッシュ キーのリストをソートしていることです。C# では、ハッシュ キーをリストに抽出し、そのリストを並べ替えるのは簡単です。

于 2009-03-24T02:00:02.543 に答える
0

私は新しいプログラマーなので、私が言うことすべてを一粒の塩で受け取ってください。しかし、同様の状況に遭遇したときに私がしたことは次のとおりです。2 つの変数を持つクラスを作成し、Listそれらの変数からオブジェクトを作成し、linq を使用してそれらの変数を並べ替えました。

于 2012-08-02T20:59:28.407 に答える
0

ルックアップ時間はほぼ一定であるため、ハッシュ テーブルを並べ替えても意味がありません。または、最悪の場合、B がバケット サイズである O(B) です。

于 2009-03-24T00:46:23.063 に答える
0

もちろん、ハッシュ テーブルを並べ替えることができますが、最初にハッシュ テーブルを並べ替えるとはどういう意味かを定義する必要があります。(そこに問題があります)

ただし、これを行うと、ハッシュテーブルが提供するすべての利点が必ず失われます。代わりに、ソートされた配列 (バイナリ検索を使用) を使用するか、赤黒木を使用することもできます。

于 2009-03-24T01:50:13.377 に答える