HashTable многомерный массив путаница? - PullRequest
0 голосов
/ 23 января 2012

Костюм - это 4 символа на карточке, а масть - это 13 цифр и букв на карточке.Я в замешательстве на

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

Говорит ли он, чтобы положить значение в PlayingCard (масть, стоимость)?А потом на this.cardPack.Add (suit, cardsInSuit);Поскольку hashTable все линейно.Я вижу это как suit = 0, а cardsInSuit - это значение, которое указывает на другой линейный массив 0-12.Я прав?

1006
  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 голосов
/ 23 января 2012

говорит ли он, чтобы положить значение в PlayingCard (масть, стоимость)

Нет, это добавляет запись на карту.Концептуально и HashTable, и SortedList - это Карты.Карта - это математическая концепция.Это коллекция пар ключ-значение.После заполнения вы «даете» коллекции ключ, и он даст вам значение, соответствующее ей.Вы также можете запросить у коллекции все ее ключи или все пары ключ-значение.

Хотя в этом коде есть много вещей, которые мне не нравятся, я постараюсь не получитьотвлекся от моих улучшений.

HashTable имеет ключ масти и значение SortedList.Учитывая способ заполнения списков, если вы дадите столу масть, она даст вам коллекцию всех карточек этой масти.

Списки SortedLists заполняются таким образом, что их ключ является значением карточки изначение конкретной карты.Существует специальный класс PlayingCard, который содержит информацию о карте, которую вы нам не показали.(Это определение довольно очевидно, поэтому нет необходимости его видеть.)

Итак, сегмент кода здесь предназначен для заполнения хеш-таблицы, в которой есть каждая карта.Его можно использовать для запроса масти, а затем запрашивать итоговую коллекцию стоимости, и в результате вам будет выдана игральная карта с этим конкретным мастью / стоимостью.Таким образом, вы можете запросить HashTable для Hearts, а затем запросить итоговую коллекцию для семерки, и вам будет предоставлена ​​игральная карта, представляющая семерку сердец.

Ни HashTable, ни SortedList не являются «линейными».Хотя реализация каждого класса довольно интересна (и пока оффтопна), лучше думать о них как о совершенно неупорядоченных.(Да, даже SortedList.) Идея этих структур заключается в том, что они будут хранить данные так, как они хотят, чтобы оптимизировать несколько операций.Эти операции включают добавление элементов на карту, удаление элементов с карты и получение значения, соответствующего определенному ключу.Каждый из них использует два разных алгоритма для достижения этой цели.HashTable хранит хеш ключа в массиве (это действительно круто и действительно эффективно, но также выходит за рамки этой статьи, чтобы объяснить.).SortedList хранит все ключи по порядку.Поскольку они в порядке, вы можете использовать алгоритм бинарного поиска, чтобы найти конкретный ключ, что гораздо быстрее, чем просматривать каждый ключ, пока не найдете нужный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...