![]() |
|
|
#1
|
||||
|
||||
|
Есть ли какая-нить возможность научить работать делфу с ассоциативными массивами? ну это те которые:
Код:
a['yo']:='fghfg'; a['test']:='fvbnvbn'; ![]() Может есть что-то похожее? |
|
#2
|
||||
|
||||
|
Задать константы?
Или нужно обязательно строки? |
|
#3
|
||||
|
||||
|
нужны строки
|
|
#4
|
||||
|
||||
|
однако - только написать свой класс, который по строке будет возвращать некое значение.
|
|
#5
|
||||
|
||||
|
Навскидку, я пока думаю взять за основу TParams, тот что используется в query-ях и переписать под свои нужды... но блин..столько времени тратить...но видимо другого варианта нет
|
|
#6
|
|||
|
|||
|
да, массивы в php просто сказка, не нужно размерность указывать, вставляй, удаляй - рай, а вот Delphi в этом плане очень отстал
![]() |
|
#7
|
||||
|
||||
|
да без проблем:
Код:
var
AStrings: TStrings;
begin
AStrings:=TStringList.Create;
try
AStrings.Values['hello']:='world';
AStrings.Values['bill']:='gates';
ShowMessage(AStrings.Values['hello']);
ShowMessage(AStrings.Values['bill']);
finally
AStrings.Free;
end;
end; |
|
#8
|
||||
|
||||
|
to NumLock, шаришь!
![]() буду пробывать |
|
#9
|
||||
|
||||
|
Дык это только для хранения строк...
|
|
#10
|
|||
|
|||
|
Цитата:
P.S.: NumLock, спасибо, сколько лет кодю, чота первый раз такое вижу Отходить стал от Delphi вообще, вся основная работа на PHP + MySQL. Только вот форум и не позволяет забыть Дельфю. |
|
#11
|
||||
|
||||
|
да, в идеале было бы хорошо хранить в таком массиве данные различных типов
|
|
#12
|
|||
|
|||
|
Код:
unit MyArray;
interface
uses
Classes;
type
TArray = class
private
Names: TStrings;
FItems: array of Variant;
function GetValue(Index: Variant): Variant;
procedure SetValue(Index: Variant; const Value: Variant);
public
constructor Create;
destructor Destroy;
function Count: Integer;
procedure Add(Name: string; Value: Variant);
procedure Insert(Name: string; Value: Variant; Index: Integer);
property Items[Index: Variant]: Variant read GetValue write SetValue; default;
end;
implementation
uses Variants, Dialogs;
{ TArray }
procedure TArray.Add(Name: string; Value: Variant);
begin
Names.Add(Name);
SetLength(FItems, Length(FItems) + 1);
FItems[High(FItems)] := Value;
end;
constructor TArray.Create;
begin
Names := TStringList.Create;
end;
destructor TArray.Destroy;
begin
Names.Free;
end;
function TArray.GetValue(Index: Variant): Variant;
var
I: Integer;
W: Word;
begin
W := VarType(Index) and varTypeMask;
case W of
varInteger, varSmallint, varShortInt, varByte:
begin
I := Index;
Result := FItems[i];
end;
varUString, varString:
Result := FItems[Names.IndexOf(Index)];
else
MessageDlg('Неверный индекс', mtError, [mbOk], 0);
end;
end;
procedure TArray.Insert(Name: string; Value: Variant; Index: Integer);
var
I: Integer;
begin
Names.Insert(Index, Name);
SetLength(FItems, Length(FItems) + 1);
for I := High(FItems) downto Index do
FItems[i] := FItems[I - 1];
FItems[Index] := Value;
end;
function TArray.Count: Integer;
begin
Result := Names.Count;
end;
procedure TArray.SetValue(Index: Variant; const Value: Variant);
var
I: Integer;
begin
case VarType(Index) and varTypeMask of
varInteger, varSmallint, varShortInt, varByte:
begin
I := Index;
FItems[i] := Value;
end;
varUString, varString:
FItems[Names.IndexOf(Index)] := Value;
else
MessageDlg('Неверный индекс', mtError, [mbOk], 0);
end;
end;
end.
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
MyArray in 'MyArray.pas';
var
A: TArray;
I: Integer;
begin
A := TArray.Create;
A.Add('Name1', 10);
A.Add('Name2', 'String');
A.Insert('Name3', 0.56, 1);
for I := 0 to A.Count - 1 do
Writeln(A[i]);
Writeln(A[0]);
Writeln(A['Name3']);
A['Name3'] := 'NewValue';
Writeln(A['Name3']);
A.Free;
Readln;
end. |
| Этот пользователь сказал Спасибо Kapitoshka438 за это полезное сообщение: | ||
friz (30.12.2011)
| ||