|
#1
|
||||
|
||||
Массивы как в пхп
Есть ли какая-нить возможность научить работать делфу с ассоциативными массивами? ну это те которые:
Код:
a['yo']:='fghfg'; a['test']:='fvbnvbn'; Может есть что-то похожее? Последний раз редактировалось Admin, Сегодня в 10:32. |
#2
|
||||
|
||||
Задать константы?
Или нужно обязательно строки? Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
нужны строки
Последний раз редактировалось Admin, Сегодня в 10:32. |
#4
|
||||
|
||||
однако - только написать свой класс, который по строке будет возвращать некое значение.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
||||
|
||||
Навскидку, я пока думаю взять за основу TParams, тот что используется в query-ях и переписать под свои нужды... но блин..столько времени тратить...но видимо другого варианта нет
Последний раз редактировалось Admin, Сегодня в 10:32. |
#6
|
|||
|
|||
да, массивы в php просто сказка, не нужно размерность указывать, вставляй, удаляй - рай, а вот Delphi в этом плане очень отстал
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#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, шаришь!
буду пробывать Последний раз редактировалось Admin, Сегодня в 10:32. |
#9
|
||||
|
||||
Дык это только для хранения строк...
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#10
|
|||
|
|||
Цитата:
P.S.: NumLock, спасибо, сколько лет кодю, чота первый раз такое вижу Отходить стал от Delphi вообще, вся основная работа на PHP + MySQL. Только вот форум и не позволяет забыть Дельфю. взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#11
|
||||
|
||||
да, в идеале было бы хорошо хранить в таком массиве данные различных типов
Последний раз редактировалось Admin, Сегодня в 10:32. |
#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)
|