![]() |
|
#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)
|