2017-01-22 13 views
0

広い範囲の最初の検索アルゴリズムを迷路ソルバーとして使用したいと考えています。迷路は、TableLayoutPanelから作成されます。ハッシュテーブル内のキーに異なる名前を付けるにはどうすればいいですか

私はこのようなものがあります。今

Hashtable hash = new Hashtable(); 
    Queue<TableLayoutPanelCellPosition> q_cellposition = new Queue<TableLayoutPanelCellPosition>(); 
    while (q_cellposition.Count != 0) 
     { 
      TableLayoutPanelCellPosition currentPosition = q_cellposition.Dequeue(); 
      TableLayoutPanelCellPosition left = new TableLayoutPanelCellPosition(currentPosition.Column - 1, currentPosition.Row); 
      Label leftN = (Label)tlp.GetControlFromPosition(left.Column, left.Row); 
      TableLayoutPanelCellPosition right = new TableLayoutPanelCellPosition(currentPosition.Column + 1, currentPosition.Row); 
      Label rightN = (Label)tlp.GetControlFromPosition(right.Column, right.Row); 

      hash.Add(leftN, currentPosition); 
      q_cellposition.Enqueue(left); 

      hash.Add(rightN, currentPosition); 
      q_cellposition.Enqueue(right); 
     } 

は、最初の反復の後に、それは明らかにハッシュテーブルに新しいKeyValuePairを追加しようとします。しかし、新しい左Nキーと右Nキーが同じラベルであると見なします(技術的にはそうではありませんが)、キーがすでに追加されているというエラーが表示されます。ハッシュテーブルに何かを追加するたびに、キーの名前を変更する必要があると思います。私の質問は今です:私はそれを効率的にどのように行うのですか?

答えて

0

I believe that some consider the Hashtable obsoleteまたはDictionaryオブジェクトよりも劣っている場合は、おそらくそれを使用する必要があります。

I think you might be able to use the array operatorDictionaryまたはHashtableに既に存在するキーにアクセスして置き換え、そのキーが既に存在している場合は例外をスローしません。

AddキーがまだHashtableにないことがわかっている場合は、これ以上です。

のでAdd文から変更します:あなたは、彼らが同じ鍵を共有している場合でも、各アイテムの一意のキーを作成する必要がない限り

hash[leftN] = currentPosition; 

hash.Add(leftN, currentPosition); 

。その時点で、キー生成時に別の変数を追加することで同じキーを異なるキー生成方法に切り替えることもできますし、別のより適切なデータ構造に切り替える必要があります。

あなたのキーが常に当たっている場合は、左と右を別々の2つのハッシュテーブルに分けて言うかもしれませんが、私はそれがあなたが望むものだとは思っていません。または、キーの前面に現在の反復を含む接頭辞を追加することもできます。しかしその時点では、おそらく一般的なStack objectでより良いでしょう。

関連する問題