Как работать с коллекцией HashTable в Visual C#

Переводы статьи Переводы статьи
Код статьи: 309357 - Vizualiza?i produsele pentru care se aplic? acest articol.
Для Microsoft Visual Basic.NET версии данной статьи, см. 307933.
Развернуть все | Свернуть все

В этой статье

Аннотация

В этой статье показано, как использовать коллекции HashTable. Поскольку хеширования исключает необходимость дорогостоящих поиска данных для извлечения данных, можно использовать хеширование эффективно извлекать данные. Хеширование использует значение самого ключа для поиска данных.

Предложить библиотеки базовых классов Хеш-таблица класс, определенный в System.Collections пространства имен таким образом, чтобы код таблицы хэша не требуется.

Шаги для построения примера

Коллекции HashTable хранятся (Ключ, значение) пара и использование Ключ для хэширования и получить место хранения. В Ключ является постоянным и не может содержать повторяющиеся записи в Хеш-таблица. В этом примере используется несколько экземпляров простого Лицо класс для хранения в Хеш-таблица. Последнее имя используется в качестве Ключ.
  1. Откройте Microsoft Visual Studio и создайте проект приложения Windows Forms в Visual C#. По умолчанию в проект добавляется Form1.
  2. В обозревателе решений щелкните правой кнопкой мыши имя проекта, в меню Добавить, а затем нажмите кнопку Класс Чтобы добавить модуль класса. По умолчанию в проект добавляется Class1.
  3. Замените код в модуль класса Class1 следующий код:
     public class Person
    {
    	public string Fname, Lname;
    
    	public Person(string FirstName, string LastName)
    	{
    		Fname = FirstName;
    		Lname = LastName;
    	}
    
    	public override string ToString()
    	{
    		return Fname + " " + Lname;
    	}
    }
    						
    В Лицо класс имеет один конструктор, принимающий «Имя» и Фамилия параметры и назначает эти параметры для локальных переменных. В ToString функция переопределения ToString из Объект класс для возврата Fname и Lname объединенные вместе.
  4. Создайте форму на уровне Хеш-таблица объект и объявите три переменные типа Лицо. Добавьте следующий код в класс Form1:
    <?xm-deletion_mark author="v-bobbid" time="20080711T172143-0800" data="private Hashtable MyTable = new Hashtable();
    		
    //For simplicity, create three Person objects to add to the HashTable collection.
    
    Person Person1,Person2,Person3; "?><?xm-insertion_mark_start author="v-bobbid" time="20080711T172143-0800"?>System.Collections.Hashtable MyTable = new 
    System.Collections.Hashtable();
    
    //For simplicity, create three Person objects to add to the HashTable collection.
    
    Person Person1,Person2,Person3; 
    <?xm-insertion_mark_end?>
    					
  5. На следующих этапах использования Добавить метод Хеш-таблица объект для добавления трех Лицо объекты Хеш-таблица в try-catch блок. В try-catch блок перехватывает исключение и выводит сообщение, если существуют дублирующиеся ключи:
    1. Место Кнопка элемент управления на форму Form1 и измените Текст Свойство Добавление элементов.
    2. Дважды щелкните кнопку, чтобы открыть ее окно кода и вставьте следующий код в Button1_Click событие:
      Person1 = new Person("David", "Burris");
      Person2 = new Person("Johnny", "Carrol");
      Person3 = new Person("Ji", "Jihuang");
      
      //The Add method takes Key as the first parameter and Value as the second parameter.
      
      try
      {
              MyTable.Add(Person1.Lname, Person1);
      	MyTable.Add(Person2.Lname, Person2);
      	MyTable.Add(Person3.Lname, Person3);
      				
      }
      catch (ArgumentException ae)
      {
      	MessageBox.Show("Duplicate Key");
      	MessageBox.Show(ae.Message);
      }
      						
  6. В Хеш-таблица объект предоставляет индексатор. В следующих шагах индекса с Ключ для доступа к значению, которое сохраняется по адресу хэшированных:
    1. Добавить Кнопка элемент управления в форму Form1 и измените Имя Свойство Получение элементов.
    2. Дважды щелкните кнопку и вставьте следующий код в Button2_Click событие:
      //Use the indexer of the Hashtable class to retrieve your objects. The indexer takes 
      //Key as a parameter and accesses it with the Hashed location.
      
      try
      {
              MessageBox.Show(MyTable[Person1.Lname].ToString());
      	MessageBox.Show(MyTable[Person2.Lname].ToString());
      	MessageBox.Show(MyTable[Person3.Lname].ToString());
      }
      catch (NullReferenceException ex)
      {
      	MessageBox.Show("Key not in Hashtable");
      	MessageBox.Show(ex.Message);
      } 
      						
  7. На следующих этапах использования Удалить метод, чтобы удалить элемент из коллекции HashTable.
    1. Добавить Кнопка элемент управления в форму Form1 и измените Текст Свойство Удалить элемент.
    2. Дважды щелкните кнопку и вставьте следующий код в Button3_Click событие:
      <?xm-deletion_mark author="v-bobbid" time="20080711T173011-0800" data="if (MyTable.Count == 0) 
      {
      	MessageBox.Show(&quot;There are no items in HashTable&quot;);
      }
      else
      {
              MessageBox.Show(&quot;The count before removing an Item is&quot; + &quot; &quot; + MyTable.Count);
              MessageBox.Show(&quot;Removing value stored at key value (Burris)&quot;);
              Remove the object that is stored at the Key value Person1.Lname.
              MyTable.Remove(Person1.Lname);
      }"?><?xm-insertion_mark_start author="v-bobbid" time="20080711T173011-0800"?>if (MyTable.Count == 0) 
      {
          MessageBox.Show("There are no items in HashTable");
      }
      else
      {
              MessageBox.Show("The count before removing an Item is" + " " + MyTable.Count);
              MessageBox.Show("Removing value stored at key value (Burris)");
              // Remove the object that is stored at the Key value Person1.Lname.
              MyTable.Remove(Person1.Lname);
      } 
      <?xm-insertion_mark_end?>
      						
  8. В следующих шагах перечисления элементов, хранящихся в коллекции HashTable.
    1. Добавить Кнопка элемент управления в форму Form1 и измените Текст Свойство Перечислить.
    2. Дважды щелкните кнопку и вставьте следующий код в Button4_Click событие:
      <?xm-deletion_mark author="v-bobbid" time="20080711T174252-0800" data="IDictionaryEnumerator Enumerator;
      
      if (MyTable.Count == 0)
      	MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
      	MessageBox.Show(&quot;Enumerating through the Hashtable collection&quot;);
      	Enumerator = MyTable.GetEnumerator();
              
              while (Enumerator.MoveNext())
      	{
      	        MessageBox.Show(Enumerator.Value.ToString());
      	}
      }
      
      ICollection MyKeys;
           
      
      if (MyTable.Count == 0) 
             MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
             MessageBox.Show(&quot;Accessing keys property to return keys collection&quot;);
             MyKeys = MyTable.Keys;
      
             foreach (object Key in MyKeys)
             {
      		MessageBox.Show(Key.ToString());
             }								   
      } 
      							"?><?xm-insertion_mark_start author="v-bobbid" time="20080711T174252-0800"?>System.Collections.IDictionaryEnumerator Enumerator;
      
      if (MyTable.Count == 0)
          MessageBox.Show("The hashtable is empty");
      else
      {
          MessageBox.Show("Enumerating through the Hashtable collection");
          Enumerator = MyTable.GetEnumerator();
      
          while (Enumerator.MoveNext())
          {
              MessageBox.Show(Enumerator.Value.ToString());
          }
      }
      
      System.Collections.ICollection MyKeys;
      
      
      if (MyTable.Count == 0)
          MessageBox.Show("The hashtable is empty");
      else
      {
          MessageBox.Show("Accessing keys property to return keys collection");
          MyKeys = MyTable.Keys;
      
          foreach (object Key in MyKeys)
          {
              MessageBox.Show(Key.ToString());
          }
      }  
      <?xm-insertion_mark_end?>
      Этот код объявляет переменную типа IDictionaryEnumerator и вызывает GetEnumerator метод коллекции HashTable. С помощью Перечислитель Перечисление элементов в коллекции возвращены, код и использует Ключи метод Хеш-таблица для перечисления ключей.
  9. На следующих этапах использования Очистить метод, чтобы удалить Хеш-таблица:
    1. Добавить Кнопка элемент управления в форму Form1 и измените Текст Свойство Очистить.
    2. Дважды щелкните кнопку и вставьте следующий код в Button5_Click событие:
      MyTable.Clear();
            MessageBox.Show("HashTable is now empty");
      						
  10. Выполните следующие действия, чтобы построить и запустить приложение.
    1. Нажмите кнопку Добавление элементов. Обратите внимание, что три Лицо объекты добавляются к коллекции HashTable.
    2. Нажмите кнопку Получение элементов. Обратите внимание на то, что индексатор получает элементы в коллекции HashTable. Три новые добавленные элементы отображаются.
    3. Нажмите кнопку Удалить элемент. Обратите внимание, что элемент в разделе реестра «burris» будет удален.
    4. Нажмите кнопку Перечислить. Обратите внимание, что IDictionaryEnumerator Перечисление элементов в коллекции HashTable и Ключи Свойство HashTable возвращает ключи коллекции.
    5. Нажмите кнопку Очистить. Обратите внимание на то, что все элементы удаляются из коллекции HashTable.
Примечание Компаний, организаций, продуктов, имена доменов, адреса электронной почты, эмблемы, людей, мест и события являются вымышленными. С реальными, организации, продукта, доменное имя, адрес электронной почты, эмблемы, лица, мест или событий является случайными и непреднамеренными.

Свойства

Код статьи: 309357 - Последний отзыв: 6 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Ключевые слова: 
kbhowtomaster kbmt KB309357 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:309357

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com