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

Re: Как связать сторонние данные с названиями переменных?
Добавлено: 05.01.2016 00:39:01
скалогрыз
по-моему ты говоришь про
RTTI
Re: Как связать сторонние данные с названиями переменных?
Добавлено: 05.01.2016 19:59:39
ANTIKLAN
скалогрыз писал(а):по-моему ты говоришь про
RTTI
Штука полезная, но немного не то. Я тут ночью залез в учебники и узнал о такой классной штуке как записи. Все стало просто ясно и логично сразу. Сделан еще один шаг к переходу на ООП

Сейчас разбираюсь как создать массив записей и с ним работать.

Re: Как связать сторонние данные с названиями переменных?
Добавлено: 05.01.2016 20:15:04
Снег Север
Массив записей создается точно так же, как массив любых других типов элементов. В чём проблема?
Re: Как связать сторонние данные с названиями переменных?
Добавлено: 06.01.2016 11:20:10
ANTIKLAN
Снег Север писал(а):Массив записей создается точно так же, как массив любых других типов элементов. В чём проблема?
Уже сделано. Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?
Re: Как связать сторонние данные с названиями переменных?
Добавлено: 06.01.2016 19:17:25
Снег Север
ANTIKLAN писал(а):Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?
Не могу понять суть проблемы. Вам надо отыскивать элемент массива по уникальному имени, что ли? Ну так давайте такое имя в дополнительном поле вашей записи и отыскивайте перебором.
Re: Как связать сторонние данные с названиями переменных?
Добавлено: 06.01.2016 19:44:15
скалогрыз
ANTIKLAN писал(а):Но есть неудобства в виде необходимости помнить под каким индексом какая запись находится. Может можно такое решение заменить чем то более удобным?
по-моему, ты говоришь про
RTTI
Re: Как связать сторонние данные с названиями переменных?
Добавлено: 06.01.2016 21:53:19
Vadim
Про базу данных он говорит. Хотя и невнятно...

Re: Как связать сторонние данные с названиями переменных?
Добавлено: 07.01.2016 01: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 05: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('двести');
Но судя по тому что
Я тут ночью залез в учебники и узнал о такой классной штуке как записи.
пока рано, как советовали выше лучше добавить дополнительное поле и искать перебором
Это альтернативы? Что то сложно очень. Мне пока не понятно.
