Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ Delphi. ВСрсия 1.4.3 ΠΎΡ‚ 1.1.2001Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ ΠžΠ·Π΅Ρ€ΠΎΠ²

SetLength(VarArray, Razmernost1); // Π£ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ измСрСния

SetLength(VarArray[1], Razmernost2); // Π£ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ измСрСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ «строки»

SetLength(VarArray[2], Razmernost3); // Π£ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ измСрСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ «строки»

SetLength(VarArray[n], Razmernost4); // Π£ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ измСрСния n-Π½ΠΎΠΉ «строки»

SetLength(VarArray[1][1], Razmernost5); // Π£ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ измСрСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ «строки» ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ «столбца»

SetLength(VarArray[1][2], Razmernost6); // Π£ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ измСрСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ «строки» Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ «столбца»

SetLength(VarArray[n][m], Razmernost7); // Π£ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ измСрСния n-Π½ΠΎΠΉ «строки» m-Π½ΠΎΠ³ΠΎ «столбца»

Ρ‚.Π΄.

ВсС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² процСссС СстСствСнно.

3. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½

Razmernost1:=Length(VarArray); // Π£ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ измСрСния (количСство строк)

Razmernost2:=Length(VarArray[1]); // Π£ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ измСрСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ «строки» (количСство столбцов)

Razmernost3:=Length(VarArray[2]); // Π£ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ измСрСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ «строки» (количСство столбцов)

Razmernost4:=Length(VarArray[n]); // Π£ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ измСрСния n-Π½ΠΎΠΉ «строки» (количСство столбцов)

Razmernost5:=Length(VarArray[1][1]); // Π£ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ измСрСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ «строки» ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ «столбца»

Razmernost6:=Length(VarArray[1][2]); // Π£ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ измСрСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ «строки» Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ «столбца»

Razmernost7:=Length(VarArray[n][m]); // Π£ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ измСрСния n-Π½ΠΎΠΉ «строки» m-Π½ΠΎΠ³ΠΎ «столбца»

4. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅

VarArray[n][m][o][p][r]:=1; // :Integer // К элСмСнту n-Π½ΠΎΠΉ «строки», m-Π½ΠΎΠ³ΠΎ «столбца», // o-Ρ‚ΠΎΠ³ΠΎ Β«?Β», p-Ρ‚ΠΎΠ³ΠΎ Β«?Β», r-Ρ‚ΠΎΠ³ΠΎ Β«?Β»

5. ΠžΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ (освобоТдСниС памяти)

SetLength (VarArray, 0); // ВсСх сразу

ДинамичСскиС массивы VI

Delphi 1

НапримСр, Ссли Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Β«GIZMOSΒ» Π² вашСм массивС, сдСлайтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

CONST

 MaxGIZMOS = $FFFF Div (SizeOf(GIZMOS)) { ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, смотря ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ GIZMOS Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅...}

TYPE

 pGIZMOArray = ^GIZMOArray;

 GIZMOArray  = Array[1..MaxGIZMOS] of GIZMOS;

VAR

 TheGIZMOS: pGIZMOArray;

 GIZMOcount: integer;

BEGIN

 GetMem(TheGIZMOS,(GIZMOcount+1)*SizeOf(GIZMO)); {НуТна Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив GetMem Π²Π΅Π΄Π΅Ρ‚ отсчСт с нуля…}

 TheGIZMOS^[index] := Whatever;

Π½Ρƒ ΠΈ Ρ‚Π°ΠΊ далСС…

TList β€” Ρ‚Π°ΠΊΠΎΠΉ динамичСский массив. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ элСктронной справкС. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ это Π΄Π΅Π»Π°Ρ‚ΡŒ сами, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GetMem для получСния указатСля Π½Π° Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ FreeMem для освобоТдСния памяти, занятой динамичСским массивом. Tlist сдСлаСт это Π·Π° вас самым Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ДинамичСскиС массивы VII

Delphi 1

БущСствуСт нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ способ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ массив Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ β€” массив строк ΠΈΠ»ΠΈ массив чисСл (Ρ†Π΅Π»Ρ‹Π΅, Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΡ€.).

1. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ простой динамичСский ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив строк, я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ tStringList, ΠΎΠ½ сам заботится ΠΎ функциях управлСния ΠΈ Π»Π΅Π³ΠΎΠΊ Π² использовании.

2. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ динамичСский ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив строк, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ tStringList (Π² случаС, Ссли число элСмСнтов вашСго массива Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π»ΠΈΠΌΠΈΡ‚ для tStringList, я полагаю ΠΎΠ½ Ρ€Π°Π²Π΅Π½ 16,000). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, создайтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ распрСдСлСния ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Допустим Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив строк, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ [12,80,7], ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ элСмСнт [n,m,x]. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ этот элСмСнт Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ ((n-1)*80*7 + (m-1)*80 + x). Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π² качСствС индСкса Π² tStringList. Для диманичСского измСнСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ† массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ tStringList Move, слуТащий ΠΊΠ°ΠΊ Ρ€Π°Π· для Ρ‚Π°ΠΊΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ. (ΠœΠ΅Ρ‚ΠΎΠ΄ состоит ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСхнологичСских Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ², Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΎΡ‡Π΅Π½ΡŒ быстро, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ tStringList ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ с самими строками, Π° с указатСлями Π½Π° Π½ΠΈΡ….)

3. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ динамичСский ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив чисСл, Ρ‚ΠΎ Π² ΠΎΠ±Ρ‰ΠΈΡ… словах я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π΅Π³ΠΎ Π½ΠΈΠΆΠ΅, Π½ΠΎ Π΅ΡΡ‚ΡŒ масса ΠΌΠ΅Π»ΠΊΠΈΡ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ массива, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ максимальноС количСство элСмСнтов Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Delphi-16 позволяСт ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ 64K), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

type

 bigArray: array[1..32000] of integer;  {ΠΈΠ»ΠΈ ^double, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅}

 pMyArray: ^bigArray;

Π·Π°Ρ‚Π΅ΠΌ распрСдСлитС сам массив:

getMem (pMyArray, sizeof(integer) * n);

Π³Π΄Π΅ n β€” количСство элСмСнтов. ПослС этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° элСмСнты массива ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

pMyArray^[51]

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ FreeMem послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π΅Π³ΠΎ использовали.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΏΠ΅Ρ€Π΅Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ массивом ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

pTemp: ^bigArray;

getMem(pTemp, sizeof(integer) * newnumelements);

memcopy(pTemp, pMyArray, sizeof(integer)*n);

{n – количСство элСмСнтов Π² pMyArray}

freeMem(pMyArray, sizeof(integer)*n);

pMyArray := pTemp;

4. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив чисСл, скомбинируйтС Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ (3), с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ распрСдСлСния, описанной Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ (2).

5. Если для вашСго массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ участок памяти большС Ρ‡Π΅ΠΌ 64K, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ список ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° участки памяти, Π½ΠΎ эта Ρ‚Π΅ΠΌΠ° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Π›ΠΈΡ‡Π½ΠΎ я инкапсулировал всС Π² своСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ, ΠΊΠ°ΠΊ я это Π½Π°Π·Ρ‹Π²Π°ΡŽ, Β«Basic String ObjectΒ» (BSO), Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ строковый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ осущСствляСт динамичСскоС распрСдСлСниС ΠΈ освобоТдСниС памяти для строк любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. НСпосрСдствСнно это PChar, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π£ мСня сущСствуСт Π΄Π²Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… свойства: AsString ΠΈ AsPChar. Π’Π°ΠΊΠΆΠ΅ Ρƒ мСня Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы доступа ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строками.

Π― написал свои собствСнныС malloc(), calloc() ΠΈ realloc(), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ частныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TString для сканирования распрСдСлСнной памяти. Π­Ρ‚ΠΎ классно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Β«Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒΒ» Π±Π»ΠΎΠΊ памяти.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² я ΠΌΠΎΠ³Ρƒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΌΠ½Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ), ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΅Π΅ (ΠΊΠΎΠ³Π΄Π° сущСствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·Π΅Ρ€Π² – ΠΈ снова Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ).

О Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ΄Π΅Π΅ я ΡƒΠΆΠ΅ рассказывал (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ массив). Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ/ΠΈΠ»ΠΈ динамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строковым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ (описанный мною Π²Ρ‹ΡˆΠ΅), Π½ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свойство-массив ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ простой доступ. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ индСксы ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²Π°ΠΌ Ρ‚ΠΈΠΏ.

TMyDynamicObject =

 β€¦

 PROPERTY Array[idx:LONGINT]:TMyType READ GetArray WRITE PutArray DEFAULT;

…


VAR Mine :TMyDynamicObject;

…

Mine := TMyDynamicObject.Create;

FOR i := 10 TO 20 DO Mine[i] := {Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅}

{Π§Π£Π”ΠžΠ’Π˜Π©ΠΠΠ― РАБВРАВА ПАМЯВИ - Ссли Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ большиС массивы ΠΈ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ }

Mine[-100000] := {Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅}

Mine[+100000] := {Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅}

Если Π² вашСм распоряТСнии находится Β«Ρ€Π΅Π΄ΠΊΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉΒ» массив, использованиС Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π°Π»ΠΎ Π±Ρ‹ сущСствСнный Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ. Π― ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽ индСксныС значСния Π² строки, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΡ€ΡƒΡ‡Π°ΡŽ TStrings, Π½ΠΎ Π½Π΅ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я Ρ‚Π°ΠΊΠΎΠΉ Π»Π΅Π½ΠΈΠ²Ρ‹ΠΉ, Π° ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ сдСлаСт это Π»ΡƒΡ‡ΡˆΠ΅ мСня, ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ всСго лишь ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² строки.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ TList (ΠΈΠ»ΠΈ TStringList.Objects)! TList.Items хранят ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ записи, Π½ΠΎ ΠΎΠ½ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ привСсти ΠΈΡ… ΠΊ Ρ‚ΠΈΠΏΡƒ longint, ΠΈ большС ΠΎ Π½ΠΈΡ… Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ! Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ хранСния Π² TList списка Ρ†Π΅Π»Ρ‹Ρ…:

var

 aList: TList;

 I : Integer;

 L : Longint;

begin

 aList := TList.Create;

 L := 93823;

 aList.Add(Pointer(L));

 aList.Add(Pointer(83293));

 for I := 1 to aList.Count do L := L + Longint(aList.Items[I-1]);

 aList.Free;

end;

Π’ TList ΠΈ TStringList Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎ 16380 элСмСнтов. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Π΅Ρ‰Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² TList записи (ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Π²Π΅Ρ€Π½Π΅Π΅, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π½ΠΈΡ…:

type

 PMyRec = TMyRec;

 TMyRec = record

  Name: string[40];

  Addr : string[25];

  Comments: string;

  salary: Double;

 end;

var

 aList: TList;

 aRecPtr: PMyRec;

 I : Integer;

begin

 aList := TList.Create;

 New(aRecPtr);

 with aRecPtr^ do begin

  Name := 'Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½';

  Addr := 'нСизвСстСн';