2017-01-22 5 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을 추가하려고 :

나는 이런 식으로 뭔가가있다. 그러나 새로운 LeftN 키와 RightN 키가 동일한 레이블로 표시됩니다 (기술적으로는 같지 않지만). 키가 이미 추가되었다는 오류가 발생합니다. Hashtable에 무언가를 추가 할 때마다 키의 이름을 변경해야한다고 생각합니다. 내 질문은 지금이다 : 나는 그것을 효율적으로 어떻게 하는가?

답변

0

I believe that some consider the Hashtable obsolete 또는 Dictionary 일반 객체보다 열등한 것일 수도 있습니다.

I think you might be able to use the array operatorDictionary 또는 Hashtable에 이미있는 키가 이미 존재하는 경우 예외를 발생시키지 않고 액세스하여이를 바꿀 수 있습니다.

Add 키가 아직 알려지지 않은 경우는 Hashtable입니다. 당신은 그들이 동일한 키를 공유하는 경우에도 각 항목에 대한 고유 키를 생성해야하지 않는 한

hash.Add(leftN, currentPosition); 

hash[leftN] = currentPosition; 

에 :

는 그래서 Add 문에서 변경합니다. 그 시점에서 키 생성 중에 다른 변수에 추가하여 동일한 키를 다른 키 생성 방법으로 전환하거나 다른 적절한 데이터 구조로 전환해야 할 수도 있습니다.

키가 항상 부딪히는 경우 왼쪽과 오른쪽을 서로 다른 두 개의 해시 테이블로 분리한다고 말할 수 있습니다. 또는 현재 반복되는 접두어를 키 앞에 추가 할 수 있습니다. 그러나이 시점에서 일반 Stack object으로 더 나을 것입니다.

관련 문제