Как связать сторонние данные с названиями переменных?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Аватара пользователя
ANTIKLAN
новенький
Сообщения: 55
Зарегистрирован: 25.02.2015 08:21:42

Как связать сторонние данные с названиями переменных?

Сообщение ANTIKLAN »

Всем привет!
Прошу помощи у более опытных коллег. :D
Есть несколько однотипных переменных, которым присвоены значения. Эти переменные комбинируются между собой. Задача в зависимости от комбинации выводить текст соответствующий своей переменной, но не являющийся значением этой переменной.
Как такое реализовать? Уже день думаю. :D
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

по-моему ты говоришь про RTTI
Аватара пользователя
ANTIKLAN
новенький
Сообщения: 55
Зарегистрирован: 25.02.2015 08:21:42

Сообщение ANTIKLAN »

скалогрыз писал(а):по-моему ты говоришь про RTTI

Штука полезная, но немного не то. Я тут ночью залез в учебники и узнал о такой классной штуке как записи. Все стало просто ясно и логично сразу. Сделан еще один шаг к переходу на ООП :D Сейчас разбираюсь как создать массив записей и с ним работать. :roll:
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3070
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Массив записей создается точно так же, как массив любых других типов элементов. В чём проблема?
Аватара пользователя
ANTIKLAN
новенький
Сообщения: 55
Зарегистрирован: 25.02.2015 08:21:42

Сообщение ANTIKLAN »

Снег Север писал(а):Массив записей создается точно так же, как массив любых других типов элементов. В чём проблема?

Уже сделано. Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3070
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

ANTIKLAN писал(а):Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?
Не могу понять суть проблемы. Вам надо отыскивать элемент массива по уникальному имени, что ли? Ну так давайте такое имя в дополнительном поле вашей записи и отыскивайте перебором.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

ANTIKLAN писал(а):Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?

по-моему, ты говоришь про RTTI
Vadim
долгожитель
Сообщения: 4111
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Про базу данных он говорит. Хотя и невнятно... :-)
zub
долгожитель
Сообщения: 2894
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

а я вангую что ТСу надо воттак

Код: Выделить всё

program dict;
{$MODE DELPHI}
uses ghashmap;
type

  StringHash=class
    class function hash(s:string; n:longint):SizeUInt;
  end;

  TMyDictionary <TValue> = class(THashMap<String, TValue,StringHash>)
  end;

  TMySuperPuperData=record
                          a:integer;
                          b:real;
                    end;

  TMySuperPuperDictionary=TMyDictionary<TMySuperPuperData>;

  function MakeHash(const s: String):SizeUInt;
  var
    I: Integer;
  begin
    Result := 0;
    for I := 1 to Length(s) do
      Result := ((Result shl 7) or (Result shr 25)) + Ord(s[I]);
  end;

  class function StringHash.hash(s:String; n:longint):SizeUInt;
  begin
       result:=makehash(s) mod SizeUInt(n);
  end;

var
 MySuperPuperDictionary:TMySuperPuperDictionary;
 MySuperPuperData:TMySuperPuperData;
begin
  MySuperPuperDictionary:=TMySuperPuperDictionary.create;

  MySuperPuperData.a:=100;
  MySuperPuperDictionary.insert('сто',MySuperPuperData);
  MySuperPuperData.a:=200;
  MySuperPuperDictionary.insert('двести',MySuperPuperData);

  writeln(MySuperPuperDictionary.GetData('сто').a);
  writeln(MySuperPuperDictionary.GetData('двести').a);

  MySuperPuperDictionary.destroy;
  readln;
end.

а конкретно вот это

Код: Выделить всё

  MySuperPuperDictionary.GetData('сто');
  MySuperPuperDictionary.GetData('двести');

Но судя по тому что
Я тут ночью залез в учебники и узнал о такой классной штуке как записи.

пока рано, как советовали выше лучше добавить дополнительное поле и искать перебором
Аватара пользователя
ANTIKLAN
новенький
Сообщения: 55
Зарегистрирован: 25.02.2015 08:21:42

Сообщение ANTIKLAN »

скалогрыз писал(а):
ANTIKLAN писал(а):Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?

по-моему, ты говоришь про RTTI


zub писал(а):а я вангую что ТСу надо воттак

Код: Выделить всё

program dict;
{$MODE DELPHI}
uses ghashmap;
type

  StringHash=class
    class function hash(s:string; n:longint):SizeUInt;
  end;

  TMyDictionary <TValue> = class(THashMap<String, TValue,StringHash>)
  end;

  TMySuperPuperData=record
                          a:integer;
                          b:real;
                    end;

  TMySuperPuperDictionary=TMyDictionary<TMySuperPuperData>;

  function MakeHash(const s: String):SizeUInt;
  var
    I: Integer;
  begin
    Result := 0;
    for I := 1 to Length(s) do
      Result := ((Result shl 7) or (Result shr 25)) + Ord(s[I]);
  end;

  class function StringHash.hash(s:String; n:longint):SizeUInt;
  begin
       result:=makehash(s) mod SizeUInt(n);
  end;

var
 MySuperPuperDictionary:TMySuperPuperDictionary;
 MySuperPuperData:TMySuperPuperData;
begin
  MySuperPuperDictionary:=TMySuperPuperDictionary.create;

  MySuperPuperData.a:=100;
  MySuperPuperDictionary.insert('сто',MySuperPuperData);
  MySuperPuperData.a:=200;
  MySuperPuperDictionary.insert('двести',MySuperPuperData);

  writeln(MySuperPuperDictionary.GetData('сто').a);
  writeln(MySuperPuperDictionary.GetData('двести').a);

  MySuperPuperDictionary.destroy;
  readln;
end.

а конкретно вот это

Код: Выделить всё

  MySuperPuperDictionary.GetData('сто');
  MySuperPuperDictionary.GetData('двести');

Но судя по тому что
Я тут ночью залез в учебники и узнал о такой классной штуке как записи.

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

Это альтернативы? Что то сложно очень. Мне пока не понятно. :)
Ответить