Collections: AssocArray — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Juliet (обсуждение | вклад) (→См. также) |
Juliet (обсуждение | вклад) |
||
Строка 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>; | ||
− | + | /// Устанавливает значение элемента с ключом 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 (полный текст модуля):