![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Индексированный массив ?
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
?