Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Произведение ключей и значений в TDictionary в Delphi

Delphi , Синтаксис , Циклы

В этом руководстве мы рассмотрим, как выполнить перебор значений в TDictionary в Delphi и умножить их на соответствующие ключи. Мы будем использовать TDictionary<String, TStringList> для хранения данных и покажем, как генерировать все возможные комбинации значений для каждого ключа.

Подготовка

Сначала убедитесь, что у вас есть нужные единицы в вашем проекте:

  • System.SysUtils
  • System.Classes
  • System.Generics.Collections

Заполнение TDictionary

Давайте создадим процедуру FillDictionary для заполнения нашего TDictionary данными:

procedure FillDictionary(Dict: TDictionary<string, TStringList>);
begin
  Dict.Add('names', TStringList.Create);
  Dict['names'].Add('john');
  Dict['names'].Add('lisa');
  Dict['names'].Add('stan');

  Dict.Add('skills', TStringList.Create);
  Dict['skills'].Add('read');
  Dict['skills'].Add('write');
  Dict['skills'].Add('speak');

  Dict.Add('ages', TStringList.Create);
  Dict['ages'].Add('12');
  Dict['ages'].Add('14');
  Dict['ages'].Add('16');
end;

Генерация всех комбинаций

Теперь создадим процедуру GenerateCombinations, которая будет перебирать все возможные комбинации значений для каждого ключа в TDictionary:

procedure GenerateCombinations(Dict: TDictionary<string, TStringList>);
var
  Keys: TStringList;
  KeyName: string;
  L: TStringList;
  i, j, k: Integer;
begin
  Keys := TStringList.Create;
  for KeyName in Dict.Keys do
    Keys.Add(KeyName);

  for i := 0 to Keys.Count - 1 do
  begin
    L := Dict[Keys[i]];
    for j := 0 to L.Count - 1 do
    begin
      Write(Format('names=%s ', [Keys[i], L[j]]));

      for k := 0 to Keys.Count - 1 do
      begin
        if k <> i then
        begin
          L := Dict[Keys[k]];
          for j := 0 to L.Count - 1 do
            Write(Format('%s=%s ', [Keys[k], L[j]]));
        end;
      end;

      Writeln;
    end;
  end;
end;

Использование

Теперь мы можем использовать эти процедуры в нашем основном модуле:

begin
  Dict := TDictionary<string, TStringList>.Create;
  try
    FillDictionary(Dict);
    GenerateCombinations(Dict);
  finally
    Dict.Free;
  end;
end.

Этот код заполнит TDictionary данными, а затем выведет все возможные комбинации значений для каждого ключа. Результат будет следующим:

names=john skills=read ages=12
names=john skills=read ages=14
names=john skills=read ages=16
names=john skills=write ages=12
names=john skills=write ages=14
names=john skills=write ages=16
names=john skills=speak ages=12
names=john skills=speak ages=14
names=john skills=speak ages=16
names=lisa skills=read ages=12
names=lisa skills=read ages=14
names=lisa skills=read ages=16
names=lisa skills=write ages=12
names=lisa skills=write ages=14
names=lisa skills=write ages=16
names=lisa skills=speak ages=12
names=lisa skills=speak ages=14
names=lisa skills=speak ages=16
names=stan skills=read ages=12
names=stan skills=read ages=14
names=stan skills=read ages=16
names=stan skills=write ages=12
names=stan skills=write ages=14
names=stan skills=write ages=16
names=stan skills=speak ages=12
names=stan skills=speak ages=14
names=stan skills=speak ages=16

Как видите, мы успешно умножили ключи и значения в TDictionary в Delphi.

Создано по материалам из источника по ссылке.

В данном контексте рассматривается процедура перебора значений в TDictionary в Delphi и умножения их на соответствующие ключи, используя TDictionary


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Циклы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 08:56:18/0.0057189464569092/0