HashTable多维数组混淆?

时间:2012-01-23 19:00:11

标签: c# hashtable

套装是卡片中的4个符号,套装是卡片的13个数字和字母。

我很困惑
cardsInSuit.Add(value, new PlayingCard(suit, value));

是否说要在PlayCard(套装,价值)中加价?然后在this.cardPack.Add(西装,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);
        }
    }

1 个答案:

答案 0 :(得分:0)

  

是否说要在PlayCard(诉讼,价值)中加值

不,它正在向地图添加条目。从概念上讲,HashTable和SortedList都是Maps。地图是一种数学概念。它是键值对的集合。填充后,您'为一个集合提供一个密钥,它将为您提供与其对应的值。您也可以向集合询问所有密钥或所有密钥值对。

虽然我对这段代码有很多不喜欢的事情,但我会尽量不去改进它。

HashTable有一个套装的键,以及一个SortedList的值。考虑到列表的填充方式,如果你给表格提供一套诉讼,它会给你一套该套装的所有卡片。

填充SortedLists,使得它们的键是卡值,值是特定的卡。有一个特殊的PlayingCard课程,其中包含您未向我们展示过的卡片信息。 (它的定义相当明显,所以没有必要去看它。)

所以,这里的代码段都是为了填充每张卡的哈希表而设计的。它的用途是询问它的套装,然后向结果集合询问一个值,结果您将获得具有该特定套装/值的PlayCard。所以你可能会问HashTable for Hearts,然后问七个结果集合,你会得到一个代表七颗心的PlayCard。

  

由于hashTable全部是线性的

HashTable和SortedList都不是'线性'。虽然每个类的实现相当有趣(现在是offtopic),但最好将它们视为完全无序。 (是的,甚至是SortedList。)这些结构的想法是,他们将存储他们想要的数据,以便优化一些操作。这些操作是向地图添加项目,从地图中删除项目,以及获取与特定键对应的值。它们各自使用两种不同的算法来实现这一点。 HashTable将键的哈希存储在一个数组中。(这非常酷,而且非常有效,但也超出了本文的范围来解释。)。 SortedList按顺序存储所有键。因为它们是有序的,所以您可以使用二进制搜索算法来查找特定的密钥,这比查找每个密钥要快得多,直到找到正确的密钥。

相关问题