Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Индексированный массив ?


Страницы:   1 2

Secam ©   (2004-12-25 09:27:00) 

У меня возник такой вопрос:
В языках типа PHP и Perl есть такое понятие, как ХЭШ или индексированный массив. Хотелось бы узнать есть ли какой-то изящный механизм реализации таких массивов в Delphi.
Т.е. требуется создать что-то вроде

type Hash_element=Record
key: string;
value: string;
end;
Hash=array of Hash_element;

Хочется иметь возможность быстрого доступа к value каждого элемента, зная его key. При этом не перебирать весь массив
каждый раз.
Подскажите, может компонент есть для этого или может какая-нибудь хитрость, как это всё описать по другому.


Sun bittern   (2004-12-25 10:24:00) [21]

Secam   (25.12.04 09:52) [3]

TValueListEditor построен с использованием TStringList.
Гляньте его исходники + F1.

The following example updates the strings in a list box given the strings contained in another list box. If a string in the source list box has the form Name=Value and the destination list box contains a string with the same Name part, the Value part in the destination list box will be replaced by the source’s value.

procedure MergeStrings(Dest, Source: TStrings);

var
 I, DI: Integer;
 begin
 for I := 0 to Source.Count - 1 do
 begin
   if Pos ('=', Source[I]) > 1 then
   begin
     DI := Dest.IndexOfName(Source.Names[I]);
     if DI > -1 then Dest[DI] := Source[I];
   end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 MergeStrings(ListBox1.Items,ListBox2.Items);
end;


Secam   (2004-12-25 09:52:00) [22]

В TStrings я нашел
property Names[const Name: string]: string;
property Values[const Name: string]: string;
Мне кажется это что-то близкое, но как этим воспользоваться для решения моей задачи, пока не понятно ...
Поясните пожалуйста.


Secam   (2004-12-25 09:42:00) [23]

Не похоже ...
TStringList ведь индексируется по номеру. Конечно можно выбрать по значению строки и понять есть ли значение в списке.
Но TStringList не дает возможности задать такие значения:

hash['key1']:='value1';
hash['key2']:='value2';
hash['key3']:='value3';

writeln(hash['key3']);

Синтакси "абстрактный" но смысл, я думаю, ясен


VMcL   (2004-12-25 09:31:00) [24]

TStringList
?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо