2012-01-23 106 views
0

西裝是卡中的4個符號,西裝是卡的13個數字和字母。我很困惑的HashTable多維數組混淆?

cardsInSuit.Add(value, new PlayingCard(suit, value)); 

難道說把價值在遊戲牌(西裝,價值)?然後在this.cardPack.Add(suit,cardsInSuit)上;由於hashTable全部是線性的。我將這看作是suit = 0,cardsInSuit是指向另一個0-12線性數組的值。我對麼?。


class Pack 
{ 
    private Hashtable cardPack; // no need to specify 
    private PlayingCard[,] cardPack; 

    public Pack() 
    { 
     this.cardPack = new Hashtable(); 

     for (Suit suit = Suit.Clubs; suit <= Suit.Spades; suit++) // outer loop 
     { 
      SortedList cardsInSuit = new SortedList(); // sorted list makes 2 array 
      for (Value value = Value.Two; value <= Value.Ace; value++) 
      { 
       cardsInSuit.Add(value, new PlayingCard(suit, value)); 
      } 
      this.cardPack.Add(suit, cardsInSuit); 
     } 
    } 
+2

您有兩個名爲'cardPack'(一個是'Hashtable',一個是'PlayingCard'的二維數組)的字段。這不會編譯 - 你是否正確地複製代碼? – Justin

回答

0

是說把在遊戲牌(西裝,值)值

不,它添加到地圖中的條目。概念上講,HashTable和SortedList都是Maps。地圖是一個數學概念。它是鍵值對的集合。一旦填充完畢,您就可以爲集合提供一個密鑰,併爲您提供與其相對應的值。您還可以詢問集合中的所有關鍵字或全部關鍵值對。

雖然有很多事情我不喜歡這段代碼,但我會盡量避免我的改進。

HashTable有一套西裝的鑰匙和一個SortedList的值。考慮到列表填充的方式,如果您給表格套裝,它會給你所有這套花色卡片的集合。

SortedLists被填充,使得它們的鍵是一個卡的值,並且該值是一個特定的卡。有一個特殊的遊戲卡類,保存關於您沒有向我們顯示的卡的信息。 (它的定義是相當明顯的,所以沒有必要看到它。)

因此,這裏的代碼段全部用於填充每張卡片的散列表。它的用途將是要求它提供一套服裝,然後向結果集合索取一個價值,結果你將獲得一張具有該特定花色/價值的撲克牌。所以你可以問一下HashTable for Hearts,然後問最終的收集七,你會得到一張代表七顆心的玩牌。

由於Hashtable是所有線性

無論是哈希表,也不是排序列表是 '線性'。雖然每個班級的實施都很有趣(現在也是偏離主題),但最好將其視爲完全無序。 (是的,即使是SortedList。)這些結構的想法是,他們將存儲他們想要的數據,以便優化一些操作。這些操作將項目添加到地圖,從地圖中刪除項目,並獲取與特定鍵相對應的值。他們每個人都使用兩種不同的算法來實現這一點。 HashTable將密鑰的散列存儲在一個數組中(這非常酷,而且非常高效,但也超出了本文的解釋範圍)。 SortedList按順序存儲所有密鑰。因爲它們是爲了您可以使用二進制搜索算法來查找特定的密鑰,比查找每個密鑰要快得多,直到找到合適的密鑰。