Использование ассоциативного массива — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Новая страница: «<source lang="pascal"> var m := new SortedDictionary<string, integer>; m['Крокодил'] := 3; m.Add('Бегемот', 2); { Если ключа …»)
 
(Пример)
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
 +
==Назначение==
 +
АТД Ассоциативный массив Dictionary<K, V> осуществляет отображение из значений типа K в значения типа V. Частным случаем ассоциативного массива является обычный массив элементов типа V: у него в качестве типа K выступают целые числа (тип integer).
 +
 +
==Пример==
 
<source lang="pascal">
 
<source lang="pascal">
   var m := new SortedDictionary<string, integer>;
+
uses System.Collections.Generic; // стандартный модуль
   m['Крокодил'] := 3;
+
 
   m.Add('Бегемот', 2);
+
// …
 +
 
 +
   var m := new Dictionary<string, integer>; // отображение из строк в целые
 +
   m['Крокодил'] := 3; // указываем значение отображения на элементе 'Крокодил'
 +
   m.Add('Бегемот', 2); // аналогично предыдущему, просто другой синтаксис.
 
   
 
   
 
   {
 
   {
      Если ключа в ассоциативном массиве нет, то геттер
+
   В данной точке программы строка:
      для индексного свойства сгенерирует исключение,
+
       var n := m['Леопард'] + 1;
      а  сеттер добавит соответствующую пару.
+
  вызовет исключение, потому что мы не определяли отображение на элементе 'Леопард'.
   Поэтому строка:
 
       m['Обезьяна'] := m['Кашалот'] + 1;
 
      вызовет исключение.
 
 
   Чтобы этого не случилось, выполним проверку:}
 
   Чтобы этого не случилось, выполним проверку:}
 
   
 
   
   if m.ContainsKey('Кашалот') then
+
   if m.ContainsKey('Леопард') then
     m['Обезьяна'] := m['Кашалот'] + 1;
+
     var n := m['Леопард'] + 1;
 
   
 
   
 
   foreach k: KeyValuePair<string, integer> in m do
 
   foreach k: KeyValuePair<string, integer> in m do
     writeln(k.Key, ' ', k.Value);
+
     writeln(k.Key, ' ', k.Value); // печатаем значения отображения на всех определённых ранее элементах
 
</source>
 
</source>
 +
 +
==Интерфейс==
 +
Стандартные классы, реализующие ассоциативный массив,
 +
* Dictionary<Key, Value>,
 +
* SortedDictionary<Key, Value>,
 +
* SortedList<Key, Value>
 +
имеют следующий интерфейс:
 +
  Add(k: Key; v: Value);
 +
  Clear;
 +
  ContainsKey(k: Key): boolean;
 +
  ContainsValue(v: Value): boolean;
 +
  Remove(k: Key): boolean;
 +
  TryGetValue(k: Key; var v: Value): boolean;
 +
  ToString: string;
 +
  property Count: integer;
 +
  property Item[k: Key]: Value;

Текущая версия на 14:02, 2 мая 2011

Назначение

АТД Ассоциативный массив Dictionary<K, V> осуществляет отображение из значений типа K в значения типа V. Частным случаем ассоциативного массива является обычный массив элементов типа V: у него в качестве типа K выступают целые числа (тип integer).

Пример

uses System.Collections.Generic; // стандартный модуль

// …

  var m := new Dictionary<string, integer>; // отображение из строк в целые
  m['Крокодил'] := 3;  // указываем значение отображения на элементе 'Крокодил'
  m.Add('Бегемот', 2); // аналогично предыдущему, просто другой синтаксис.
 
  {
   В данной точке программы строка:
      var n := m['Леопард'] + 1;
   вызовет исключение, потому что мы не определяли отображение на элементе 'Леопард'.
   Чтобы этого не случилось, выполним проверку:}
 
  if m.ContainsKey('Леопард') then
    var n := m['Леопард'] + 1;
 
  foreach k: KeyValuePair<string, integer> in m do
    writeln(k.Key, ' ', k.Value); // печатаем значения отображения на всех определённых ранее элементах

Интерфейс

Стандартные классы, реализующие ассоциативный массив,

  • Dictionary<Key, Value>,
  • SortedDictionary<Key, Value>,
  • SortedList<Key, Value>

имеют следующий интерфейс:

 Add(k: Key; v: Value);
 Clear; 
 ContainsKey(k: Key): boolean;
 ContainsValue(v: Value): boolean;
 Remove(k: Key): boolean;
 TryGetValue(k: Key; var v: Value): boolean;
 ToString: string;
 property Count: integer;
 property Item[k: Key]: Value;