Страница 1 из 1

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

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

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

СообщениеДобавлено: 05.01.2016 01:39:01
скалогрыз
по-моему ты говоришь про RTTI

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

СообщениеДобавлено: 05.01.2016 20:59:39
ANTIKLAN
скалогрыз писал(а):по-моему ты говоришь про RTTI

Штука полезная, но немного не то. Я тут ночью залез в учебники и узнал о такой классной штуке как записи. Все стало просто ясно и логично сразу. Сделан еще один шаг к переходу на ООП :D Сейчас разбираюсь как создать массив записей и с ним работать. :roll:

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

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

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

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

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

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

СообщениеДобавлено: 06.01.2016 20:17:25
Снег Север
ANTIKLAN писал(а):Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?
Не могу понять суть проблемы. Вам надо отыскивать элемент массива по уникальному имени, что ли? Ну так давайте такое имя в дополнительном поле вашей записи и отыскивайте перебором.

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

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

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

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

СообщениеДобавлено: 06.01.2016 22:53:19
Vadim
Про базу данных он говорит. Хотя и невнятно... :-)

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

СообщениеДобавлено: 07.01.2016 02:45:40
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('двести');

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

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

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

СообщениеДобавлено: 07.01.2016 06:07:38
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('двести');

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

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

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