2012-01-23 4 views
0

Костюм - это 4 символа на карточке и костюм - это 13 номеров и букв карты. Я смущен наHashTable многомерный путаница массива?

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

ли он говорит поместить значение в игральных картах (костюм, стоимость)? И затем на this.cardPack.Add (костюм, cardInSuit); Поскольку hashTable все линейно. Я вижу это как suit = 0, а cardInSuit - это значение, указывающее на другой линейный массив 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', а второй - 2-мерный массив 'PlayingCard'). Это не скомпилируется - правильно ли вы скопировали код? – Justin

ответ

0

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

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

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

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

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

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

Поскольку в hashTable все линейные

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

Смежные вопросы