powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сделать Асоциативный многомерный массив
75 сообщений из 75, показаны все 3 страниц
Как сделать Асоциативный многомерный массив
    #39986039
NikolasGood
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
В PHP и других языках есть асоциативные массивы. С ними очень удобно работать. А вот в Delphi из коробки их нет. В нете есть несколько подобий их реализации, но что-то у меня ни один не заработал (Rad Studio 10.3)

Может вы знаете какую нибудь реализацию асоциативных массивов в Delphi?
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986040
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ассоциативный массив - это ключ + значение?

Разве такого в Delphi нет?
А дженерики? TCollection, TList, TDictionary?
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986109
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolasGood,

JSON, TStringList
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Многомерный это как? В ключе надо чтоб стояло 2 параметра?
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986143
X11,

В PHP массивы это Ключ (Строка \ Число) => Любое значение. С сохранением порядка добавления.

И это очень быстро работает, особенно в связке с миллион функций для сортировки этих массивов.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986146
mayton
Многомерный это как? В ключе надо чтоб стояло 2 параметра?


Без ограничений там.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?php
$Arr1 = [1, 2, 3];
$Arr2 = [4, $Arr1, 5];
$Arr3 = [];
$Arr3[] = 'Hello';
$Arr3[1] = $Arr2[2];
$Arr3[] = $Arr2;

print_r($Arr3);




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Array
(
    [0] => Hello
    [1] => 5
    [2] => Array
        (
            [0] => 4
            [1] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )

            [2] => 5
        )

)
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986162
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо массив произвольной структуры, то стоит использовать XSuperObject.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986168
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
В PHP массивы это Ключ (Строка \ Число) => Любое значение.


в Дельфи есть Variant
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986170
X11,

Лучше уж TValue чем этот Variant
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986171
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный,
TValue - тормоз.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986174
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986195
rgreat,

Не TValue тормоз, а дженерики тормознутые.

Variant
0.000268
6,69692879491417E304
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.Button1Click(Sender: TObject);
var
  A, b, C: Variant;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := b + (A / I) + b;
    C := (b - A) * A;
  end;

  ShowMessage(PrintTime(T1) + #13 + VarToStr(C))
end;



TValue
0.000365
6,69692879491417E304
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.Button2Click(Sender: TObject);
var
  A, b, C: TValue;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := b.AsExtended + (A.AsExtended / I) + b.AsExtended;
    C := (b.AsExtended - A.AsExtended) * A.AsExtended;
  end;

  ShowMessage(PrintTime(T1) + #13 + C.ToString)
end;



Но стоит поменять с AsExtended
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function TValue.AsExtended: Extended;
begin
  if not IsEmpty then
  begin
    if FTypeInfo = System.TypeInfo(Extended) then
      Exit(FAsExtended)
    else if FTypeInfo^.Kind = tkFloat then
      case GetTypeData(FTypeInfo)^.FloatType of
        ftSingle: Exit(FAsSingle);
        ftDouble: Exit(FAsDouble);
        ftExtended: Exit(FAsExtended);
      end;
  end;
  Result := AsType<Extended>;
end;



На прямой вызов AsType<Extended>

0.001695
6,69692879491417E304
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.Button3Click(Sender: TObject);
var
  A, b, C: TValue;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := b.AsType<Extended> + (A.AsType<Extended> / I) + b.AsType<Extended>;
    C := (b.AsType<Extended> - A.AsType<Extended>) * A.AsType<Extended>;
  end;

  ShowMessage(PrintTime(T1) + #13 + C.ToString)
end;



Сразу какие то Цифры огромные в потери вызова


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, rtti;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  T1: Int64;

function sprintf(S: PAnsiChar; const Format: PAnsiChar): integer; cdecl;
  varargs; external 'msvcrt.dll';

procedure StartTime;
begin
  QueryPerformanceCounter(T1);
end;

function PrintTime(T: Int64): AnsiString;
var
  A, b: Int64;
begin
  Result := '';
  if QueryPerformanceCounter(A) and QueryPerformanceFrequency(b) then
  begin
    SetLength(Result, 25);
    SetLength(Result, sprintf(PAnsiChar(Result), '%f', single((A - T) / b)));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  A, b, C: Variant;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := b + (A / I) + b;
    C := (b - A) * A;
  end;

  ShowMessage(PrintTime(T1) + #13 + VarToStr(C))
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  A, b, C: TValue;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := b.AsExtended + (A.AsExtended / I) + b.AsExtended;
    C := (b.AsExtended - A.AsExtended) * A.AsExtended;
  end;

  ShowMessage(PrintTime(T1) + #13 + C.ToString)
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  A, b, C: TValue;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := b.AsType<Extended> + (A.AsType<Extended> / I) + b.AsType<Extended>;
    C := (b.AsType<Extended> - A.AsType<Extended>) * A.AsType<Extended>;
  end;

  ShowMessage(PrintTime(T1) + #13 + C.ToString)
end;

end.

...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986209
Пробить отметку ниже 0.000347 не получается никак
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
function GetExtended(var v: TValue): Extended; inline;
begin
  Result := 0;
  v.ExtractRawData(@Result);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  A, b, C: TValue;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := GetExtended(b) + (GetExtended(A) / I) + GetExtended(b);
    C := (GetExtended(b) - GetExtended(A)) * GetExtended(A);
  end;

  ShowMessage(PrintTime(T1) + #13 + C.ToString)
end;



Слишком низко качественный код оптимизатор генерирует.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986211
experience
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ассоциативней не бывает
http://www.minimdb.com/download/minimonowin64list.html

MiniM Embedded Edition (Win64) Content List

MiniM Embedded Edition Installer setup the following applications, tools, documentation and additional files:

MiniMono Dynamic Link Library for Windows x64
MiniMono Routine Editor
MiniMono Global Editor
MiniM Collation Editor
MiniMono command-line interface
MiniMono console interface
Initial content of system routines
Default empty database file
MiniM Language Guide
MiniM Advanced Guide
Default set of collation files
Interface files for C++, Delphi and C#
Examples for C++, Delphi and C#
JNI module and Java examples
ZDEVICE Examples
ZDLL Examples
Current build release notes
MiniMono Uninstaller
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986216
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Пробить отметку ниже 0.000347 не получается никак
А если
Код: pascal
1.
2.
var
  A, b, C: Extended;

?
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986218
_Vasilisk_,

Так суть в том что, тип может и с первой женой, и со второй, и с парнем за гаражом.

Ну ладно.

0.000039
6,69692879491417E304

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.Button4Click(Sender: TObject);
var
  A, b, C: Extended;
  I: integer;
begin
  A := 0;
  b := 0;
  C := 0;

  StartTime;
  for I := 1 to 1000 do
  begin
    A := (5 * I) / 2;
    b := (b) + ((A) / I) + (b);
    C := ((b) - (A)) * (A);
  end;

  ShowMessage(PrintTime(T1) + #13 + C.ToString)
end;

...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986220
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный, любая древовидная структура данных автору подходит.

Возможно подойдет и JSonDocument, XmlDocument но если нужна будет быстрая навигация
по известному "path" то надо смотреть какая структура внутри. Не везде хеш-табличка
в основе.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986224
mayton,

Из самых банальных
Код: pascal
1.
2.
3.
type
  TBaseData = TDictionary<TValue, TValue>;
  TBaseDataPair = TPair<TValue, TValue>;




Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, rtti,
  System.Generics.Collections;

type
  TBaseData = TDictionary<TValue, TValue>;
  TBaseDataPair = TPair<TValue, TValue>;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    BaseData: TBaseData;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  BaseData := TBaseData.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BaseData.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  idx: integer;
begin
  idx := BaseData.Count;
  BaseData.Add(idx, 'Test' + idx.ToString);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  v: TBaseDataPair;
  s: string;
begin
  s := '';
  for v in BaseData do
    s := s + v.Key.ToString + ' = ' + v.Value.ToString + #13;
  ShowMessage(s)
end;

end.

...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986227
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Так суть в том что, тип может и с первой женой, и со второй, и с парнем за гаражом.
Это понятно
ВсеРазумный
0.000039
ВсеРазумный
Пробить отметку ниже 0.000347 не получается никак
Т.е. нативный тип дает прирост на порядок
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986228
NikolasGood
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
Если надо массив произвольной структуры, то стоит использовать XSuperObject.

Выглядит очень круто, я так понимаю это его GitHub https://github.com/onryldz/x-superobject
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986231
_Vasilisk_,

Но нативный тип не нужен в задачи, так что он идёт лесом.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986252
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolasGood,

Да, это оно.
Достаточно удобная весчь если надо обрабатывать стриктуры типа "кот в мешке".
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986269
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NikolasGood
Всем привет.
В PHP и других языках есть асоциативные массивы. С ними очень удобно работать. А вот в Delphi из коробки их нет. В нете есть несколько подобий их реализации, но что-то у меня ни один не заработал (Rad Studio 10.3)

Может вы знаете какую нибудь реализацию асоциативных массивов в Delphi?

Может, начать разбираться с возможностями самого Delphi, а не пытаться сделать "так, как в пэхапэ".
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986270
ъъъъъ,

Люди привыкли к хорошему, избаловались. А тут им предлагают посидеть на выпуклом месте.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986276
GrigoriyFomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВсеРазумный, это похоже на дедовщину - меня полгода гнобили, теперь я буду новобранцев гнобить.
переведу для тех, кто не служил - раз я заморочился и решил эту олимпиадную задачу - пусть теперь любой доразовьется до моего уровня (я - ж бог программирования!!!) и попробует ее также решить!

К чему это - в пхп это делается красиво и удобно, в дельфе из коробки решения нет, но вместо развития дельфей до уровня современных языков, вы предлагаете костыли по принципу - из того что было, то и налепила. Вот только не надо тут упоминать в суе дженерики, tdictionry<> и прочие прокладки. Дельфи в данном случае слился - факт. Опровергните красивым кодом, плз, дабы посыпать седины дельфийского программера с опытом 20 лет пеплом.
Что навеяло - вкладка Win3.1 - то есть в дельфях главное поддержать совместимость с Win3.10 90 какого-то года, нежели внедрять новые течения современных языков! А по сути - FireDac - купили сторонний, FireMonkey - энтузиазмский проект, че осталось? вкладки Win32 и win 3.1
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986277
GrigoriyFomin
меня полгода гнобили, теперь я буду новобранцев гнобить.


Это так не работает, если писюлька маленькая, тебя новобранцы на пукан оденут,и отправят по полю без трусиков клещей ловить удочкой на обед.


GrigoriyFomin
в дельфе из коробки решения нет, но вместо развития дельфей до уровня современных языков, вы предлагаете костыли по принципу - из того что было, то и налепила.


Я могу в Delphi юзать чистые массивы PHP со всеми плюшками без инициализации PHP интерпретатора если он не нужен. Прирост производительности будет больше чем у всего, что есть в Delphi
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986281
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrigoriyFomin
ВсеРазумный, это похоже на дедовщину - меня полгода гнобили, теперь я буду новобранцев гнобить.
переведу для тех, кто не служил - раз я заморочился и решил эту олимпиадную задачу - пусть теперь любой доразовьется до моего уровня (я - ж бог программирования!!!) и попробует ее также решить!

К чему это - в пхп это делается красиво и удобно, в дельфе из коробки решения нет, но вместо развития дельфей до уровня современных языков, вы предлагаете костыли по принципу - из того что было, то и налепила. Вот только не надо тут упоминать в суе дженерики, tdictionry<> и прочие прокладки. Дельфи в данном случае слился - факт. Опровергните красивым кодом, плз, дабы посыпать седины дельфийского программера с опытом 20 лет пеплом.
Что навеяло - вкладка Win3.1 - то есть в дельфях главное поддержать совместимость с Win3.10 90 какого-то года, нежели внедрять новые течения современных языков! А по сути - FireDac - купили сторонний, FireMonkey - энтузиазмский проект, че осталось? вкладки Win32 и win 3.1

"Моск пэхапэшника" - (с).
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986289
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

ПхпГМ
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986318
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
experience
Ассоциативней не бывает
http://www.minimdb.com/download/minimonowin64list.html


а цена...
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986338
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Без ограничений там.

Это не многомерный массив, а вложенный.
Многомерных в PHP нет.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986392
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyFomin
К чему это - в пхп это делается красиво и удобно, в дельфе из коробки решения нет,
Как-то странно сравнивать компилируемый и интерпретируемые языки.

Хорошо, Делфи отстой. Приведите пример решения на Java. Напомню требования

1. Ключами массива могут быть строки и/или числа
2. Строковой индекс, который может быть преобразован к числу, должен быть преобразован к числу
3. Массив должен сохранять порядок добавления элементов
4. Должен быть быстрый поиск по ключу
5. Элементами массива могут быть любые типы, в том числе и массивы
6. Все преобразования типов должны происходить под капотом
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986425
Alibek B.
Многомерных в PHP нет.


А кто это у нас такой умный

Пример #14 Рекурсивные и многомерные массивы

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<?php
$fruits = array ( "fruits"  => array ( "a" => "апельсин",
                                       "b" => "банан",
                                       "c" => "яблоко"
                                     ),
                  "numbers"   => array ( 1,
                                       2,
                                       3,
                                       4,
                                       5,
                                       6
                                     ),
                  "holes"   => array (      "первая",
                                       5 => "вторая",
                                            "третья"
                                     )
                );

// Несколько примеров доступа к значениям предыдущего массива
echo $fruits["holes"][5];    // напечатает "вторая"
echo $fruits["fruits"]["a"]; // напечатает "апельсин"
unset($fruits["holes"][0]);  // удалит "первая"

// Создаст новый многомерный массив
$juices["apple"]["green"] = "good"; 
?>

...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986449
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

6. Все преобразования типов должны происходить под капотом

Не согласен с требованием.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986452
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если непонятно, могу переставить слова: в PHP нет многомерных массивов, есть только вложенные (рекурсивные).
Если не знаете, что такое многомерные массивы — посмотрите фортран.
Многомерный массив — это a[i1,i2,...], а не a[i1][i2]...
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986458
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь как-то с самого начала топика идет борьба терминологий. Много-мерный ключ это так.
Если

Код: c#
1.
dict["mayton"] ="ID_01"



то это одномерный справочник пользователй sql.ru где ключ - одна строка.

А вот - многомерный

Код: c#
1.
geo_dict[125,6] ="Детский садик"



В географическом справочнике в квадрате 125,6 лежит некое описание что это - детский садик.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986464
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много-мерных справочников - скорее всего не бывает. Никто их так не классифицирует.
Но есть просто справочники где Value - нетипизированное и вы можете в Value положить
любой объект в т.ч. строку и число и такой-же еще справочник.

Это уже 100 лет существует и в C#/Java но никто это не обзывает много-мерным и ассоциативным.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986470
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Много-мерных справочников - скорее всего не бывает.

Разумеется, это крайне неэффективно (по расходу памяти) и никому не нужно.
А вот многомерные массивы иногда бывают нужны.
Просто в PHP некоторые структуры названы массивами (и ведут себя как массивы), вот студенты и привыкают это название проецировать на остальные случаи.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986506
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант реализация ассоциативных массивов
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=868
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986527
Alibek B.
Если непонятно, могу переставить слова: в PHP нет многомерных массивов, есть только вложенные (рекурсивные).
Если не знаете, что такое многомерные массивы — посмотрите фортран.
Многомерный массив — это a[i1,i2,...], а не a[i1][i2]...


Так это одно и тоже, просто разный подход к обращению.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986528
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
GrigoriyFomin
К чему это - в пхп это делается красиво и удобно, в дельфе из коробки решения нет,
Как-то странно сравнивать компилируемый и интерпретируемые языки.

Хорошо, Делфи отстой. Приведите пример решения на Java. Напомню требования

1. Ключами массива могут быть строки и/или числа
2. Строковой индекс, который может быть преобразован к числу, должен быть преобразован к числу
3. Массив должен сохранять порядок добавления элементов
4. Должен быть быстрый поиск по ключу
5. Элементами массива могут быть любые типы, в том числе и массивы
6. Все преобразования типов должны происходить под капотом

В дельфи есть, не совсем, но почти такое.
Конкретно - у меня.
Словарь для хранения данных типа Variant. То есть, может и вариантные массивы.
Ключом является строка. Доступ по ключу быстрый, ибо словарь. На основе (наследник) TDictionary из библиотеки Fundamentals,
При этом сохраняется возможность доступа в порядке добавления. Быстрее, чем TStringList.
Интерфейс:
Код: pascal
1.
2.
3.
4.
5.
6.
m['колбаса'] := 'Колбаса';
m['возраст'] := 27;
if m.exists('колбаса') then
  ShowMessage(m['колбаса']);
ShowMessage(VarToStr(m.ValByIndex(1))); // 27
ShowMessage(m.KeyByIndex(1)); // 'возраст'


Экспортирован в движок фастрепорта для ручного кодирования сложных отчетов в скрипте.
Произвольные типы не поддерживает, естественно, но поддерживает всё, что реализует разработчик. :)
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986529
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВсеРазумный
Alibek B.
Если непонятно, могу переставить слова: в PHP нет многомерных массивов, есть только вложенные (рекурсивные).
Если не знаете, что такое многомерные массивы — посмотрите фортран.
Многомерный массив — это a[i1,i2,...], а не a[i1][i2]...


Так это одно и тоже, просто разный подход к обращению.

Фиквам это, а не одно и тоже.
В Delphi многомерный массив занимает непрерывную область памяти, соответственно, позволяя манипулировать с такой памятью. А массив массивов - непрерывная область указателей на другие массивы.
Также разница в управлении памятью.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986530
ъъъъъ,

Какая разница что там под капотом, если важен внешний вид
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986531
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ

Экспортирован в движок фастрепорта для ручного кодирования сложных отчетов в скрипте.

А Фастовского TfrxVariable не хватает ?
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986532
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВсеРазумный
ъъъъъ,

Какая разница что там под капотом, если важен внешний вид


Особенно если и внешний вид разный.
Ты пьяный, что ли.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986538
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

фастовский - он медленный (ну это ладно), в некоторых случаях:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function TfrxVariables.IndexOf(const Name: String): Integer;
var
  i: Integer;
begin
  Result := -1;
  for i := 0 to Count - 1 do
    if AnsiCompareText(Name, Items[i].Name) = 0 then
    begin
      Result := i;
      break;
    end;
end;


и в каких-то версиях (сейчас не знаю, может уже нет) сохранял значения созданных пересенных в шаблоне, что иногда веселило в ненеожиданные моменты... :)
И почему-то я не смог найти способ определить - есть ли такая переменная со значением null, или нет, ну вот надо было.

И ещё что-то. Потом плюнул и создал свой, такой, как пожелала моя левая пятка в тот момент времени... например, доступ по индексу (в порядке добавления).
И вообще я использую его и в проектах без фастрепорта - точно одним TfrxVariables не обойтись было... :)
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986541
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986545
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ, А можете кейс использования переменных описать ?
Что там храниться, и как, в таком количестве, чтобы поиск в лоб сильно тормозил работу.
Вопрос уже поднимался как-то, но до реальных кейсов не доходило. Нужно понять, что тут лучше делать, переделывать переменные или вводить новую сущность в виде словаря.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986546
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Den_Z_,

да ну. Меня уже водили мордой по батарее, что скрипты большинству не нужны, поэтому редактор убогий и отладчик.
Не стану отвлекать - глядишь, силы на редактор будут направлены, или на отладчик.

ЗЫ: дошло, "реальные кейсы" == "ну и нах.. вам это надо"...
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986549
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,

Ну вот, уже в рукобатарея-прикладстве обвиняют
А я всего-то поинтересовался, как используете.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986550
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Den_Z_,
вспомнил, откуда это у меня пошло. Что-то группировал/собирал, попытался использовать вариантные массивы,все было очень плохо.

Загрузил демку VCL FR6, посмотреть. Все как раньше.

VarArrayCreate() - есть, но пользоваться созданными массивами все также неудобно.
Как узнать размерность и границы созданного массива?
Как изменить элемент вложенного массива без полного копирования всего вложенного массива?
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986551
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Den_Z_

А я всего-то поинтересовался, как используете.

Да так же, как в вашем описании из документации, где get/set: что-то собираю/группирую.
В контексте скрипта присутствует одна глобальная переменная типа "словарь", или можно создать сколько угодно - чтобы у "переменных" было разное пространство имен.
Почти как у вас, только быстро и чтобы переменные не сериализовались всякий раз, когда при разработке ctrl+s жмешь.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986553
ъъъъъ

VarArrayCreate()


Вот по этому я против типа variant и топлю за TValue

Ибо пока разберёшься, привыкнешь и изучишь. Слишком много времени. А там раз, и пользуешься.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986559
ъъъъъ,

Какой ты злой, прям руку по локоть скушаешь,,, лишь бы откусить. И опять мы бредим.

Прям по первой ссылке из гугла в

FastScript поддерживает все типы массивов: статические (одномерные,многомерные), динамические, вариантные. Вот пример скрипта, использующеготри массива целых чисел, объявленных разным способом:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  ar1: array[0..2] of Integer;
  ar2: array of Integer;
  ar3: Variant;

SetLength(ar2, 3);
ar3 := VarArrayCreate([0, 2], varInteger);
ar1[0] := 1;
ar2[0] := 1;
ar3[0] := 1;



А это значит что, что бы узнать размер массива VarArrayCreate надо применить те же самые манипуляции, что и при обычном массиве
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986571
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
А это значит что, что бы узнать размер массива VarArrayCreate надо применить те же самые манипуляции, что и при обычном массиве

К сожалению, VarArrayCreate единственная зарегистрированная функция. Остальные функций работы с массивом нужно добавлять вручную
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986576
DimaBr,

То есть, в fastreport нету совершенно функции Length для всех 3 вариантов. Ну в принципе ладно.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986587
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
GrigoriyFomin
К чему это - в пхп это делается красиво и удобно, в дельфе из коробки решения нет,
Как-то странно сравнивать компилируемый и интерпретируемые языки.

Хорошо, Делфи отстой. Приведите пример решения на Java. Напомню требования

1. Ключами массива могут быть строки и/или числа
2. Строковой индекс, который может быть преобразован к числу, должен быть преобразован к числу
3. Массив должен сохранять порядок добавления элементов
4. Должен быть быстрый поиск по ключу
5. Элементами массива могут быть любые типы, в том числе и массивы
6. Все преобразования типов должны происходить под капотом
да, та ещё дилема
LinkedHashMap завезли, а вот Variant нет

в дельфи придётся написать LinkedHashMap - что в принципе не так сложно
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986591
kealon(Ruslan)

LinkedHashMap завезли, а вот Variant нет

в дельфи придётся написать LinkedHashMap - что в принципе не так сложно


Завезли более чем 8 лет назад. 2020Г - Придётся написать в Delphi.

Звучит абсурдно. Ну и Java разработчики не жалуются на отсутствие Variant. Хороший пример реализация JPHP где есть массивы как в PHP и переменные. И управления типами - точно такое же. И даже массивы хранят свой порядок добавления элементов :D Но язык посредственный.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986592
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
DimaBr,
То есть, в fastreport нету совершенно функции Length для всех 3 вариантов. Ну в принципе ладно.

Length есть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  if MethodName = 'LENGTH' then
  begin
    v := Caller.Params[0];
    if VarIsArray(v) then
      Result := VarArrayHighBound(v, 1) - VarArrayLowBound(v, 1) + 1
    else
      Result := Length(v)
  end
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986593
DimaBr,

Ну вот. Развели ор, раньше гор. Хотя и так всё из коробки есть для базового уровня.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986596
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
kealon(Ruslan)

LinkedHashMap завезли, а вот Variant нет

в дельфи придётся написать LinkedHashMap - что в принципе не так сложно


Завезли более чем 8 лет назад. 2020Г - Придётся написать в Delphi.

Звучит абсурдно. Ну и Java разработчики не жалуются на отсутствие Variant. Хороший пример реализация JPHP где есть массивы как в PHP и переменные. И управления типами - точно такое же. И даже массивы хранят свой порядок добавления элементов :D Но язык посредственный.
что абсурдно звучит? что в стандартной поставке RTL от дельфи нет TLinkedDictionary?
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986597
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
DimaBr,
Ну вот. Развели ор, раньше гор. Хотя и так всё из коробки есть для базового уровня.

Это не я придумывал собственный механизм. Мне TfrxVariable вполне хватает.
К сожалению, VarArrayCreate единственная зарегистрированная функция. Остальные функций работы с массивом нужно добавлять вручную
из этого набора только VarArrayCreate зарегистрированна
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function VarIsArray(const A: Variant): Boolean; overload;
function VarIsArray(const A: Variant; AResolveByRef: Boolean): Boolean; overload;

function VarArrayCreate(const Bounds: array of Integer; AVarType: TVarType): Variant;
function VarArrayOf(const Values: array of Variant): Variant;

function VarArrayRef(const A: Variant): Variant;

function VarTypeIsValidArrayType(const AVarType: TVarType): Boolean;
function VarTypeIsValidElementType(const AVarType: TVarType): Boolean;

{ The following functions will handle normal variant arrays as well as
  variant arrays references by another variant using byref }

function VarArrayDimCount(const A: Variant): Integer;
function VarArrayLowBound(const A: Variant; Dim: Integer): Integer;
function VarArrayHighBound(const A: Variant; Dim: Integer): Integer;

function VarArrayLock(const A: Variant): Pointer;
procedure VarArrayUnlock(const A: Variant);

function VarArrayAsPSafeArray(const A: Variant): PVarArray;

function VarArrayGet(const A: Variant; const Indices: array of Integer): Variant;
procedure VarArrayPut(var A: Variant; const Value: Variant; const Indices: array of Integer);

{ Variant Arrays <--> Dynamic Arrays }

procedure DynArrayToVariant(var V: Variant; const DynArray: Pointer; TypeInfo: Pointer);
procedure DynArrayFromVariant(var DynArray: Pointer; const V: Variant; TypeInfo: Pointer);

...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986602
DimaBr,

Я понимаю что не ты придумал. Я даже знал что есть.

Кстати, видел ещё вызов VarArrayOf так что не единственная. Скорее всего там предусмотрена проверка что переменная является массивом. Так что функция VarIsArray не нужна. VarArrayRef тоже не нужна. VarTypeIsValidArrayType и VarTypeIsValidElementType тоже не нужны. VarArrayLock и VarArrayUnlock тоже не нужны. VarArrayAsPSafeArray тоже не нужна.
Функции VarArrayGet и VarArrayPut реализованы через [idx] + := val. Так же не нужны DynArrayToVariant и DynArrayFromVariant и опять же реализованы VarArrayLowBound и VarArrayHighBound


Больше нечего добавлять. Всё нужное есть. Так что и жаловаться не на что.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986610
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Кстати, видел ещё вызов VarArrayOf так что не единственная

VarArrayOf - не зарегистрированна
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986612
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
демка 6.5.0
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986613
DimaBr,

Значит они решили что она не нужна.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986618
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
и опять же реализованы VarArrayLowBound и VarArrayHighBound

На самом деле VarArrayCreate - это не настоящая VarArrayCreate из Delphi. Сюрпайз!!!
Фастовская VarArrayCreate создаёт массив размерностью 0..HighBound. Захотел создать массив [3..5] - пиши свою реализацию
И узнать нижнюю/верхнюю границу стандартными средствами нельзя.
Разработчики считают, что раз создаётся только массивы от НУЛЯ, то и границы массивов определять не нужно (достаточно Length), хотя именно в Lengh написано (Result := VarArrayHighBound(v, 1) - VarArrayLowBound(v, 1) + 1), то есть из верхней границы вычитается нижняя (хотя она же нулевая).
По факту, Length работает для всех массивов, а VarArrayCreate - только "собственных"
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
else if MethodName = 'VARARRAYCREATE' then
    Result := VArrayCreate(Caller.Params[0], Caller.Params[1])

function VArrayCreate(Args: Variant; Typ: Integer): Variant;
var
  i, n: Integer;
  ar: array of {$IFDEF FPC}SizeInt{$ELSE}Integer{$ENDIF};
begin
  n := VarArrayHighBound(Args, 1) + 1;
  SetLength(ar, n);
  for i := 0 to n - 1 do
    ar[i] := Args[i];

  Result := VarArrayCreate(ar, Typ);
  ar := nil;
end;


Обман кроется в мелочах
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986620
DimaBr,

Опять индусы писали код
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986643
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Функция работает так же как и в Delphi, никакого обмана в ней нет.
Код: pascal
1.
2.
3.
  ar := VarArrayCreate([1, 3, 3, 5], varInteger);
  ar[1, 4] := 1;
  ar[3, 3] := 2;



Приведенный код просто копирует параметр с открытым массивом , из array of variant (используемый в скрипте) в array of Integer(который принимает VarArrayCreate).
Вот, Low/High действительно не хватает из коробки. Спасибо.

ъъъъъ, Спасибо. Т.е. нужна структура быстрого доступа виде Arr['Ключ1', 'Ключ2', ... 'КлючN'] из коробки по аналогии с переменными.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986666
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Den_Z_
ъъъъъ, Спасибо. Т.е. нужна структура быстрого доступа виде Arr['Ключ1', 'Ключ2', ... 'КлючN'] из коробки по аналогии с переменными.

Да в общем-то достаточно одного ключа (один параметр), т.к. всегда склеить строки можно.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986676
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_
DimaBr,
Функция работает так же как и в Delphi, никакого обмана в ней нет.

Значит был не прав. Не допонял для чего такой странный механизм копирования
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986701
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,

Понял. Я просто пытаюсь обобщить задачу(с нашей стороны), чтобы ее конкретизировать для реализации. Хотелось бы иметь контейнер, в который можно свернуть, к примеру таблицу, а потом обращаться arr[<Line>, FieldName]. т.к. давно спрашивают об организации пользовательских данных, хранящихся не в БД. Поэтому и спрашивал у вас об использовании, хотелось бы обобщить в универсальное решение.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39986939
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_
ъъъъъ,

Понял. Я просто пытаюсь обобщить задачу(с нашей стороны), чтобы ее конкретизировать для реализации. Хотелось бы иметь контейнер, в который можно свернуть, к примеру таблицу, а потом обращаться arr[<Line>, FieldName]. т.к. давно спрашивают об организации пользовательских данных, хранящихся не в БД. Поэтому и спрашивал у вас об использовании, хотелось бы обобщить в универсальное решение.
гугли "LINQ Delphi"
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39988543
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
ВсеРазумный,
TValue - тормоз.
Ты уверен?

http://docwiki.embarcadero.com/Libraries/XE2/en/System.Rtti.TValue Represents a lightweight version of the Variant type.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39988645
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

Это результат моих тестов.
...
Рейтинг: 0 / 0
Как сделать Асоциативный многомерный массив
    #39988714
Квейд,

Медленнее! На много. На целых 0.000097 сек. Я считаю что это показатель не использовать TValue (Рофл)
...
Рейтинг: 0 / 0
75 сообщений из 75, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сделать Асоциативный многомерный массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]