2012-01-23 63 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按顺序存储所有密钥。因为它们是为了您可以使用二进制搜索算法来查找特定的密钥,比查找每个密钥要快得多,直到找到合适的密钥。