Collections: AssocArray — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Juliet (обсуждение | вклад) |
Juliet (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | [[Категория: | + | [[Категория:Collections]] |
== Интерфейс == | == Интерфейс == | ||
<source lang="Delphi"> | <source lang="Delphi"> | ||
Строка 115: | Строка 115: | ||
[[Unit Collections | Collections]] (полный текст модуля): | [[Unit Collections | Collections]] (полный текст модуля): | ||
− | *[[Unit Collections: Stack | Stack]] | + | * [[Unit Collections: Stack | Stack]] |
− | *[[Unit Collections: Queue | Queue]] | + | * [[Unit Collections: Queue | Queue]] |
− | *[[Unit Collections: DynArray | DynArray]] | + | * [[Unit Collections: DynArray | DynArray]] |
− | *[[Unit Collections: SimpleSet | SimpleSet]] | + | * [[Unit Collections: SimpleSet | SimpleSet]] |
+ | * [[Unit Collections: LinkedList | LinkedList]] |
Текущая версия на 11:52, 9 мая 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 (полный текст модуля):