Collections: AssocArray — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(См. также)
Строка 15: Строка 15:
 
<source lang="Delphi">
 
<source lang="Delphi">
 
interface
 
interface
 +
 +
type
 +
  /// Шаблон класса AssocArray [Ассоциативный массив]
 +
  AssocArray<KeyType, ValueType> = class
 +
  private
 +
    /// Ключи
 +
    keys: DynArray<KeyType> := new DynArray<KeyType>;
 +
    /// Значения, соответствующие ключам
 +
    values: DynArray<ValueType> := new DynArray<ValueType>;
 
   
 
   
uses Nodes;  // для использования типа SingleNode<DataType> —
+
    /// Устанавливает значение элемента с ключом key равным value
              // узла с одним полем связи
+
    procedure SetElem(key: KeyType; value: ValueType);
 
+
    /// Возвращает значение элемента с ключом key
 +
    function GetElem(key: KeyType): ValueType;
 +
 +
   public
 +
    // --------------------------------- Свойства --------------------------------
 +
    /// Позволяет обращаться к элементам массива по ключу
 +
    /// (Например, zoo['крокодил'])
 +
    property Elem[key: KeyType]: ValueType read GetElem write SetElem; default;
 +
 +
    // ---------------------------------- Вывод ----------------------------------
 +
    ///Выводит содержимое ассоциативного массива на консоль
 +
    procedure Println();
 +
  end;
  
 
implementation
 
implementation
  
 
+
// ---------------------------- Доступ к элементам ---------------------------
 +
{Устанавливает значение элемента с ключом key равным value}
 +
procedure AssocArray<KeyType, ValueType>.SetElem(key: KeyType; value: ValueType);
 +
begin
 +
  var ind := Keys.Find(key);
 +
  if ind <> -1 then
 +
    Values[ind] := value
 +
  else
 +
  begin
 +
    Keys.Add(key);
 +
    Values.Add(value);
 +
  end;
 +
end;
 +
 +
{Возвращает значение элемента с ключом key}
 +
function AssocArray<KeyType, ValueType>.GetElem(key: KeyType): ValueType;
 +
begin
 +
  var ind := Keys.Find(key);
 +
  if ind <> -1 then
 +
    result := Values[ind]
 +
  else
 +
  begin
 +
    Keys.Add(key);
 +
    Values.Add(default(ValueType));
 +
    result := default(ValueType);
 +
  end;
 +
end;
 +
 +
// ---------------------------------- Вывод ----------------------------------
 +
{Выводит содержимое ассоциативного массива на консоль}
 +
procedure AssocArray<KeyType, ValueType>.Println();
 +
begin
 +
  for var i := 0 to keys.Count - 1 do
 +
    writeln(keys[i], ': ', values[i]);
 +
end;
 
</source>
 
</source>
  
 
== Примеры использования ==
 
== Примеры использования ==
 +
<source lang="Delphi">
 +
uses Collections;
 +
 +
begin
 +
  // Создание нового объекта ассоциативного массива
 +
  var zoo := new AssocArray<string, integer>;
 +
 
 +
  // Создание нового элемента
 +
  zoo['Жираф'] := 5;
 +
  zoo['Слон'] := 1;
 +
 
 +
  // Чтение несуществующего элемента
 +
  // (автоматически добавляется в массив с нулевым значением)
 +
  writeln('Какаду: ', zoo['Какаду']);
 +
  writeln();
 +
 
 +
  // Вывод сдержимого всего ассоциативного массива
 +
  writeln('Содержимое ассоциативного массива:');
 +
  zoo.Println;
 +
  writeln();
 +
 
 +
  // Изменение значение элемента
 +
  zoo['Какаду'] := zoo['Какаду'] + 3;
 +
 
 +
  writeln('Содержимое ассоциативного массива:');
 +
  zoo.Println;
 +
  writeln();
 +
end.
 +
</source>
  
 
== См. также ==
 
== См. также ==

Версия 20:04, 30 апреля 2009

Интерфейс

type AssocArray<DataType> = class
  /// Позволяет обращаться к элементам массива по ключу
  /// (Например, zoo['крокодил'])
  property Elem[key: KeyType]: ValueType;
 
  
  ///Выводит содержимое ассоциативного массива на консоль
  procedure Println();
end;

Реализация

interface

type
  /// Шаблон класса AssocArray [Ассоциативный массив]
  AssocArray<KeyType, ValueType> = class
  private
    /// Ключи
    keys: DynArray<KeyType> := new DynArray<KeyType>;
    /// Значения, соответствующие ключам
    values: DynArray<ValueType> := new DynArray<ValueType>;
 
    /// Устанавливает значение элемента с ключом key равным value
    procedure SetElem(key: KeyType; value: ValueType);
    /// Возвращает значение элемента с ключом key
    function GetElem(key: KeyType): ValueType;
 
  public
    // --------------------------------- Свойства --------------------------------
    /// Позволяет обращаться к элементам массива по ключу
    /// (Например, zoo['крокодил'])
    property Elem[key: KeyType]: ValueType read GetElem write SetElem; default;
 
    // ---------------------------------- Вывод ----------------------------------
    ///Выводит содержимое ассоциативного массива на консоль
    procedure Println();
  end;

implementation

// ---------------------------- Доступ к элементам ---------------------------
{Устанавливает значение элемента с ключом key равным value}
procedure AssocArray<KeyType, ValueType>.SetElem(key: KeyType; value: ValueType);
begin
  var ind := Keys.Find(key);
  if ind <> -1 then
    Values[ind] := value
  else
  begin
    Keys.Add(key);
    Values.Add(value);
  end;
end;
 
{Возвращает значение элемента с ключом key}
function AssocArray<KeyType, ValueType>.GetElem(key: KeyType): ValueType;
begin
  var ind := Keys.Find(key);
  if ind <> -1 then
    result := Values[ind]
  else
  begin
    Keys.Add(key);
    Values.Add(default(ValueType));
    result := default(ValueType);
  end;
end;
 
// ---------------------------------- Вывод ----------------------------------
{Выводит содержимое ассоциативного массива на консоль}
procedure AssocArray<KeyType, ValueType>.Println();
begin
  for var i := 0 to keys.Count - 1 do
    writeln(keys[i], ': ', values[i]);
end;

Примеры использования

uses Collections;

begin
  // Создание нового объекта ассоциативного массива
  var zoo := new AssocArray<string, integer>;
  
  // Создание нового элемента
  zoo['Жираф'] := 5;
  zoo['Слон'] := 1;
  
  // Чтение несуществующего элемента 
  // (автоматически добавляется в массив с нулевым значением)
  writeln('Какаду: ', zoo['Какаду']); 
  writeln();
  
  // Вывод сдержимого всего ассоциативного массива
  writeln('Содержимое ассоциативного массива:');
  zoo.Println;
  writeln();
  
  // Изменение значение элемента
  zoo['Какаду'] := zoo['Какаду'] + 3;
  
  writeln('Содержимое ассоциативного массива:');
  zoo.Println;
  writeln();
end.

См. также

Collections (полный текст модуля):