Collections: AssocArray
Материал из Вики ИТ мехмата ЮФУ
(перенаправлено с «Unit Collections: AssocArray»)
Интерфейс
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 (полный текст модуля):