Ассоциативные массивы — это структура данных, где элементы обращаются не по индексу, а по ключу. В языке Pascal и его среде разработки Delphi такой тип данных отсутствует в стандартной библиотеке, но его можно реализовать с помощью классов, предоставляемых стандартными библиотеками, такими как TFPGMap из модуля fgl. В этом примере мы рассмотрим, как использовать TFPGMap для создания ассоциативного массива со строками в качестве ключей и списками строк в качестве значений.
Шаг 1: Подключение необходимых модулей
Для начала необходимо подключить модуль fgl в ваш проект. Откройте файл единицы вашего проекта и добавьте в раздел uses следующую строку:
Допустим, у вас есть файл с данными о странах и их языках в следующем формате:
Bulgaria = Bulgarian
Croatia = Croatian
Austria = Croatian German Hungarian Slovenian
# и так далее
Создайте кнопку Button1 и TMemo с именами Memo1 на вашей форме. В обработчик нажатия кнопки Button1Click добавьте следующий код:
type
TMap = specialize TFPGMap<string, TStringList>;
procedure TAssocForm.Button1Click(Sender: TObject);
var
mydata: TMap;
myfile: Text;
line: string;
country, language: string;
mypos, left, right: Integer;
SL: TStringList;
I: Integer;
begin
// Инициализация ассоциативного массива
mydata := TMap.Create;
// Открытие файла 'myfile.txt' для чтения
Assign(myfile, 'путь\к\файлу\myfile.txt'); // Укажите путь к вашему файлу
Reset(myfile);
// Чтение строк из файла
while not Eof(myfile) do
begin
Readln(myfile, line);
mypos := Pos('=', line);
// Разделение строки на страну и язык
country := Copy(line, 1, mypos - 1);
language := Copy(line, mypos + 2, Length(line) - mypos);
// Удаление пробелов в начале и конце строки
country := Trim(country);
language := Trim(language);
// Если ключ отсутствует, создаем новый список строк
if mydata.IndexOf(country) < 0 then
mydata.Add(country, TStringList.Create);
// Добавление языка в список страны
mydata[country].Add(language);
end;
Close(myfile);
// Заполнение Memo данными из ассоциативного массива
Memo1.Lines.Clear;
for I := 0 to mydata.Count - 1 do
begin
country := mydata.Keys[I];
SL := mydata[country];
line := country + ' -> ';
for language in SL do
line := line + language + ' ';
Memo1.Lines.Add(Trim(line));
end;
// Освобождение памяти
for I := 0 to mydata.Count - 1 do
mydata[mydata.Keys[I]].Free;
mydata.Free;
end;
Шаг 3: Запуск программы
Запустите вашу программу и нажмите кнопку Button1, чтобы прочитать файл и отобразить результаты в TMemo.
Этот пример демонстрирует, как создать ассоциативный массив в Pascal с использованием класса TFPGMap, который позволяет использовать строки в качестве ключей и списки строк в качестве значений. Обратите внимание, что для работы с TFPGMap необходимо подключить модуль fgl, который может не идти в комплекте с базовыми версиями Delphi и может потребоваться установка дополнительных компонентов.
Пример реализации ассоциативных массивов в языке программирования Pascal с использованием класса `TFPGMap` из модуля `fgl` для обработки данных из файла.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.