2009-03-24 10 views
14

私はHashTableを返すプロパティを持っています。私は私の財産をリファクタリングせずにそれを並べ替えると思います。 ご注意ください:私は別のタイプを返すしたくないです。 コード: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; 
     } 
    } 
+0

+1 downvoteのため!それはハッシュテーブルが何であるかを理解していない人からの完全に有効な質問です! –

+0

+1のためにdownvote。質問は、ポスターがHashTableの仕組みを知らないが完全に有効なトピックであることを示しています。 – snemarch

+1

@agassan:ポストをちょっときれいにして、より密着してLINQの質問を削除しました。それはあなたが本当に求めていたものではないようです。あなたがこれが好きではない場合は、ロールバックしてください。 –

答えて

8

もう1つの方法は、すでに行っているようにハッシュテーブルを作成し、次にキーから並べ替えられたセットを作成することです。ソートされたキーセットを反復し、必要に応じてハッシュテーブルから対応する値を取得することができます。

+0

これは私がそれを動作させることができた方法です。 – user81740

3

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

2

私は...ハッシュテーブルをソートすることができないことを非常に確信しています;)

Wikipedia Hash Table

6

lubos権利である:あなたソートハッシュテーブルはできません。可能であれば、ハッシュテーブルではありません。 HashTableを列挙し、列挙を並べ替えることができます。しかし、それは非常に遅いでしょう。代わりにSortedDictionaryを使用するほうがはるかに優れています。

0

すでにほぼ一定の検索時間があるため、ハッシュテーブルのソートには意味がありません。または最悪の場合O(B)ここで、Bはバケットサイズです。

18

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

ただし、SortedDictionary<K,V>をご覧ください。

+0

ありがとうございます。よく働く。キーペア値を使用して要素をドロップダウンするので、私は原子炉のプロパティに非常に簡単でした – user81740

1

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

0

もちろん、ハッシュテーブルをソートすることはできますが、最初にハッシュテーブルをソートすることを定義する必要があります。あなたは、しかし、あなたは必ずハッシュテーブルはあなたを与えることができるという利点をすべて削除したことを行っている、とあなたにも(バイナリサーチで)ソートされた配列を使用することがあります一度

(そこの問題をある)、または使用代わりに赤 - 黒の木。

1

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

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

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

ここのトリックは、ハッシュキーのコピーリストをソートされ、Perlはハッシュをソートしていないということです。 C#では、ハッシュキーをリストに抽出し、そのリストをソートするだけで十分です。

+0

私は、SortListオブジェクトを作成し、次にハッシュテーブルの値をループし、SortListとsortList.Sort() – user81740

0

私は新しいプログラマーです。私が塩の穀物で言うすべてを取る。しかし、ここに私が同様の状況に遭遇したときにしたことがあります。私は2つの変数を持つクラスを作成し、それらの変数からListオブジェクトを作成し、それらの変数を並べ替えるためにlinqを使いました。

関連する問題