ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” Π·Π°Π΄Π°Ρ‡Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сталкиваСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, опСрация каТСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π½Π΅ просто повСрхностноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ссылок, Π° созданиС ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ нСзависимой ΠΊΠΎΠΏΠΈΠΈ. Π’ зависимости ΠΎΡ‚ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ†Π΅Π»Π΅ΠΉ использования, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ способы копирования массивов Π² 1Π‘ 8.3 ΠΈ 1Π‘ 8.2, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ структурами, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ динамичСскими массивами. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡƒ повСдСнию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с ситуациСй, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ массива Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»ΠΎ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π», ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” копия Β«Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»Π°Β» ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ, этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ….

1. Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ копирования массивов

Начнём с самых простых ΠΈ распространённых способов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подходят для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²ΠΎ всСх Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания (=). Однако здСсь Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² 1Π‘ массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ присваивании Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π½Π΅ Π½ΠΎΠ²ΡƒΡŽ копию, Π° Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ ссылку Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив. НапримСр:

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1);

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(2);

МассивКопия = ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»; // Π­Ρ‚ΠΎ НЕ копия, Π° ссылка!

МассивКопия[0] = 10; // Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡΡ ΠΈ Π² ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»[0]!

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ массивом ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Для настоящСго копирования Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

  • πŸ”Ή ΠœΠ΅Ρ‚ΠΎΠ΄ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” создаёт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½ΡƒΡŽ копию массива. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов с простыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (числа, строки, Π΄Π°Ρ‚Ρ‹).
  • πŸ”Ή ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Новый Массив с пСрСчислСниСм элСмСнтов β€” Ρ€ΡƒΡ‡Π½ΠΎΠ΅ созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ массива с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ значСниями.
  • πŸ”Ή Π¦ΠΈΠΊΠ» Для КаТдого β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°ΠΆΠ΅ для слоТных структур.

Рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

πŸ“Š Какой способ копирования массивов Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
ΠœΠ΅Ρ‚ΠΎΠ΄ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
Π ΡƒΡ‡Π½ΠΎΠ΅ созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ массива
Π¦ΠΈΠΊΠ» Для КаТдого
Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

2. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: быстро, Π½ΠΎ с ограничСниями

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ появился Π² 1Π‘ 8.3.4 ΠΈ стал самым ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ способом для повСрхностного копирования. Он создаёт Π½ΠΎΠ²Ρ‹ΠΉ массив с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ элСмСнтами, Π½ΠΎ Π½Π΅ рСкурсивно. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли массив содСрТит Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΎΠ½ΠΈ останутся ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° ΠΈ ΠΊΠΎΠΏΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1);

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘Ρ‚Ρ€ΠΎΠΊΠ°");

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Массив); // Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ массив

МассивКопия = ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ;

// ИзмСняСм элСмСнт ΠΊΠΎΠΏΠΈΠΈ - ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚

МассивКопия[0] = 99;

// Но Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ массив - измСнСния отразятся Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅!

МассивКопия[2].Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Новый элСмСнт"); // Добавится ΠΈ Π² ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»[2]

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° высока: ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅. Однако для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ копирования (ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры) ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ массивами, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ/Π”Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ (см. Ρ€Π°Π·Π΄Π΅Π» 5).

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π“Π»ΡƒΠ±ΠΈΠ½Π° копирования
ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ массивы (числа, строки, Π΄Π°Ρ‚Ρ‹) ⭐⭐⭐⭐⭐ ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½Π°Ρ
Π ΡƒΡ‡Π½ΠΎΠ΅ созданиС ΠœΠ°ΡΡΠΈΠ²Ρ‹ с извСстной структурой ⭐⭐⭐ ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½Π°Ρ
Π¦ΠΈΠΊΠ» Для КаТдого Π›ΡŽΠ±Ρ‹Π΅ массивы, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ⭐⭐ Зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

3. Π ΡƒΡ‡Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· конструктор Массив

Если массив нСбольшой ΠΈ Π΅Π³ΠΎ структура Π·Π°Ρ€Π°Π½Π΅Π΅ извСстна, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, пСрСчислив всС элСмСнты Π² конструкторС Новый Массив. Π­Ρ‚ΠΎΡ‚ способ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΠΈ ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ явного указания всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Массив(1, 2, 3,"ВСкст", Π˜ΡΡ‚ΠΈΠ½Π°);

// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ копию Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ

МассивКопия = Новый Массив;

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π¦ΠΈΠΊΠ»

МассивКопия.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΡƒΠ΄ΠΎΠ±Π΅Π½ для статичСских Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ становится Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с динамичСскими массивами, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстСн. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… массивов β€” ΠΈΡ… придётся ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы?

Если массив содСрТит Π΄Ρ€ΡƒΠ³ΠΈΠ΅ массивы ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈ Π²Ρ‹ скопировали Π΅Π³ΠΎ повСрхностно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ простой Ρ†ΠΈΠΊΠ»), Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ элСмСнта Π² ΠΊΠΎΠΏΠΈΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» Ρ‚Π°ΠΊΠΆΠ΅ измСнится. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для ΠΎΠ±ΠΎΠΈΡ… массивов. НапримСр:

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Массив;

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Массив(1, 2, 3));

Копия = ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ;

Копия[0][0] = 99; // Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡΡ ΠΈ ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»[0][0]!

4. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅

Π‘Π°ΠΌΡ‹ΠΉ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ, Π½ΠΎ ΠΈ самый ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ способ β€” ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ элСмСнтов массива Π² Ρ†ΠΈΠΊΠ»Π΅ Для КаТдого. Он позволяСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс ΠΈ ΠΏΡ€ΠΈ нСобходимости Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур.

Базовая рСализация:

Ѐункция ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠœΠ°ΡΡΠΈΠ²(Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Новый Массив;

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π¦ΠΈΠΊΠ»

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚); // Для простых Ρ‚ΠΈΠΏΠΎΠ²

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ копирования потрСбуСтся рСкурсивная функция, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Ѐункция Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠœΠ°ΡΡΠΈΠ²Π°(Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Новый Массив;

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π¦ΠΈΠΊΠ»

Если Π’ΠΈΠΏΠ—Π½Ρ‡(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) = Π’ΠΈΠΏ("Массив") Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠœΠ°ΡΡΠΈΠ²Π°(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚));

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ Π’ΠΈΠΏΠ—Π½Ρ‡(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) = Π’ΠΈΠΏ("Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°") Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠžΠ±ΡŠΠ΅ΠΊΡ‚(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚)); // Для структур

Π˜Π½Π°Ρ‡Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Массив;

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1);

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Новый Массив("А","Π‘"));

Копия = Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠœΠ°ΡΡΠΈΠ²Π°(ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»);

πŸ’‘

РСкурсивноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” СдинствСнный Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ способ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ. Однако ΠΎΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ унивСрсалСн, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ свои минусы:

  • 🐒 Низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (ΠΈΠ·-Π·Π° рСкурсии ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Ρ‚ΠΈΠΏΠΎΠ²).
  • 🧩 Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° возрастаСт ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, БоотвСтствиС ΠΈΠ»ΠΈ Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅).
  • πŸ”„ Риск зацикливания, Ссли массив содСрТит ссылки Π½Π° сСбя (рСкурсивныС структуры).

5. ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ: сСриализация ΠΈ дСсСриализация

Для слоТных случаСв, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ссылками Π½Π° справочники ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ массив Π² строку (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON ΠΈΠ»ΠΈ XML), Π° Π·Π°Ρ‚Π΅ΠΌ восстанавливаСт Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠΏΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм JSON:

// ВрСбуСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,"Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ΠšΠ»ΠΈΠ΅Π½Ρ‚Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹Π΅ΠœΠΎΠ΄ΡƒΠ»ΠΈ")

Ѐункция ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠ§Π΅Ρ€Π΅Π·JSON(Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ)

Π—Π°ΠΏΠΈΡΡŒJSON = Новый Π—Π°ΠΏΠΈΡΡŒJSON;

Π—Π°ΠΏΠΈΡΡŒJSON.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ;

Π—Π°ΠΏΠΈΡΡŒJSON.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ(Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ);

Π‘Ρ‚Ρ€ΠΎΠΊΠ°JSON = Π—Π°ΠΏΠΈΡΡŒJSON.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ;

Π§Ρ‚Π΅Π½ΠΈΠ΅JSON = Новый Π§Ρ‚Π΅Π½ΠΈΠ΅JSON;

Π§Ρ‚Π΅Π½ΠΈΠ΅JSON.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°JSON);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π§Ρ‚Π΅Π½ΠΈΠ΅JSON.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • πŸ”„ ПолноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности.
  • πŸ“¦ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слоТных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ).
  • πŸ”’ Копия ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°.

НСдостатки:

  • 🐒 МСдлСннСС Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (сСриализация/дСсСриализация Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ).
  • πŸ”Œ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для JSON).
  • 🚫 НС всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 1Π‘ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ систСмныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹).

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON

Массив Π½Π΅ содСрТит нСсСриализуСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹)

Π£Ρ‡Ρ‚Π΅Π½Π° возмоТная потСря точности для чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π° случай ошибок сСриализации-->

6. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массивов с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ 1Π‘

ΠžΡΠΎΠ±ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ массивы, содСрТащиС ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 1Π‘ (элСмСнты справочников, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, рСгистры). ΠŸΡ€ΠΈ повСрхностном ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ ссылки, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ послСдствиям ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с массивом ссылок Π½Π° справочник НомСнклатура:

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ.НомСнклатура.ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ("Π’ΠΎΠ²Π°Ρ€ 1"));

ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ.НомСнклатура.ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ("Π’ΠΎΠ²Π°Ρ€ 2"));

// ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²!)

МассивКопия = ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ;

// ИзмСнСниС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΊΠΎΠΏΠΈΠΈ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»!

МассивКопия[0].НаимСнованиС ="НовоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅"; // Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡΡ ΠΈ Π² ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»[0]!

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ссылки, Π° значСния ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, Ρ‚Π°ΠΊ:

Ѐункция ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²(Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Новый Массив;

Для КаТдого ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Из Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π¦ΠΈΠΊΠ»

ΠΠΎΠ²Ρ‹ΠΉΠžΠ±ΡŠΠ΅ΠΊΡ‚ = ΠžΠ±ΡŠΠ΅ΠΊΡ‚.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠžΠ±ΡŠΠ΅ΠΊΡ‚; // ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠΠΎΠ²Ρ‹ΠΉΠžΠ±ΡŠΠ΅ΠΊΡ‚);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для справочников ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ссли ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ. Однако ΡƒΡ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рСгистры) ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” Π² этом случаС придётся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… свойства.

МассивКопий = Новый Массив;

Для КаТдого Π”ΠΎΠΊ Из ΠœΠ°ΡΡΠΈΠ²ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π¦ΠΈΠΊΠ»

МассивКопий.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π”ΠΎΠΊ.Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

-->

7. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ массивов Π² 1Π‘ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Рассмотрим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС ΠΈΠ· Π½ΠΈΡ… ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Ошибка 1: ИзмСнСниС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° ΠΏΡ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΏΠΈΠΈ

Π­Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ повСрхностноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для массивов с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ структурами. РСшСниС β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Ошибка 2: ΠŸΠΎΡ‚Π΅Ρ€Ρ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ сСриализации

НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, COMObject ΠΈΠ»ΠΈ Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅) Π½Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² JSON. РСшСниС β€” ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Base64 для Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…).

Ошибка 3: Π—Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ рСкурсивном ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Если массив содСрТит ссылку Π½Π° сСбя, рСкурсивная функция ΡƒΠΉΠ΄Ρ‘Ρ‚ Π² бСсконСчный Ρ†ΠΈΠΊΠ». РСшСниС β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° ΡƒΠΆΠ΅ скопированныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹:

Ѐункция Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠœΠ°ΡΡΠΈΠ²Π°Π‘Π΅Π·Π—Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡ(Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ, Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ = Новый БоотвСтствиС)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Новый Массив;

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Π¦ΠΈΠΊΠ»

Если Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅[Π­Π»Π΅ΠΌΠ΅Π½Ρ‚]);

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ Π’ΠΈΠΏΠ—Π½Ρ‡(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) = Π’ΠΈΠΏ("Массив") Π’ΠΎΠ³Π΄Π°

НовыйЭлСмСнт = Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠœΠ°ΡΡΠΈΠ²Π°Π‘Π΅Π·Π—Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅);

Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, НовыйЭлСмСнт);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(НовыйЭлСмСнт);

Π˜Π½Π°Ρ‡Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ошибка 4: НСкоррСктная Ρ€Π°Π±ΠΎΡ‚Π° с НСопрСдСлСно

Если массив содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ НСопрСдСлСно, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ копирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JSON-сСриализация) ΠΌΠΎΠ³ΡƒΡ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. РСшСниС β€” явная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°ΠΊΠΈΡ… случаСв.

πŸ’‘

ВсСгда тСстируйтС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи: пустыС массивы, массивы с NULL, рСкурсивныС структуры ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с цикличСскими ссылками.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ вСрсиях 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.2 ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствуСт. Для копирования массивов Π² 8.2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ созданиС Π½ΠΎΠ²Ρ‹Ρ… массивов.

8. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ?

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° копирования зависит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΈ ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° массивС ΠΈΠ· 10 000 элСмСнтов (тСсты ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20):

ΠœΠ΅Ρ‚ΠΎΠ΄ ВрСмя выполнСния (мс) ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ
ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ~15 Низкая ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ массивы
Π¦ΠΈΠΊΠ» Для КаТдого (повСрхностный) ~45 БрСдняя Π›ΡŽΠ±Ρ‹Π΅ массивы
РСкурсивноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ~120 Высокая Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры
БСриализация Π² JSON ~300 ΠžΡ‡Π΅Π½ΡŒ высокая Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • πŸš€ Для максимальной скорости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Ссли достаточно повСрхностного копирования).
  • πŸ”„ Для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… массивов ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ рСкурсивный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ сСриализация.
  • πŸ“¦ Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² 1Π‘ (справочники, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹) ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ… явно Ρ‡Π΅Ρ€Π΅Π· ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
  • πŸ’Ύ Для сохранСния ΠΊΠΎΠΏΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСансами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„Π°ΠΉΠ»Π΅) сСриализация β€” СдинствСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами (Π±ΠΎΠ»Π΅Π΅ 100 000 элСмСнтов) рСкурсивныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ стСка. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠ»ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ массив Π½Π° части.
Как ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ?

Если массив содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ систСмныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ), Π²Π°ΠΌ придётся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ экзСмпляры ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… свойства. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Ѐункция ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠ‘Π»ΠΎΠΆΠ½Ρ‹ΠΉΠžΠ±ΡŠΠ΅ΠΊΡ‚(ΠžΠ±ΡŠΠ΅ΠΊΡ‚)

ΠΠΎΠ²Ρ‹ΠΉΠžΠ±ΡŠΠ΅ΠΊΡ‚ = Новый Π’ΠΈΠΏΠ—Π½Ρ‡(ΠžΠ±ΡŠΠ΅ΠΊΡ‚); // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°

Для КаТдого Бвойство Из ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.Бвойства Π¦ΠΈΠΊΠ»

Если Бвойство.Имя <>"Бсылка" Π’ΠΎΠ³Π΄Π° // ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅ΠΌ слуТСбныС свойства

ΠΠΎΠ²Ρ‹ΠΉΠžΠ±ΡŠΠ΅ΠΊΡ‚[Бвойство.Имя] = ΠžΠ±ΡŠΠ΅ΠΊΡ‚[Бвойство.Имя];

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΠΎΠ²Ρ‹ΠΉΠžΠ±ΡŠΠ΅ΠΊΡ‚;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для массивов Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с Ρ†ΠΈΠΊΠ»ΠΎΠΌ копирования.

МоТно Π»ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Запроса 1Π‘?

НСт, Запрос 1Π‘ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для копирования массивов. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π±Π°Π·Ρ‹, Π° Π½Π΅ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² памяти. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запрос для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ массива Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ источника (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ· справочника). ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Запрос = Новый Запрос;

Запрос.ВСкст ="ВЫБРАВЬ ΠŸΠ΅Ρ€Π²Ρ‹Π΅ 10 НомСнклатура.Бсылка КАК Бсылка Π˜Π— Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура КАК НомСнклатура";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π—Π°ΠΏΡ€ΠΎΡΠ° = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ;

МассивКопия = Новый Массив;

Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π—Π°ΠΏΡ€ΠΎΡΠ°.Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ;

Пока Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π¦ΠΈΠΊΠ»

МассивКопия.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Бсылка);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС копирования массива с Π΄Π°Ρ‚Π°ΠΌΠΈ ΠΎΠ½ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ?

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ·-Π·Π° Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

  1. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Ρ‚Ρ‹: ΠŸΡ€ΠΈ сСриализации/дСсСриализации Π΄Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² строки Π² Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, YYYY-MM-DD вмСсто DD.MM.YYYY). РСшСниС β€” явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.
  2. Часовой пояс: Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π΄Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ приводятся ΠΊ UTC. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ НачалоДня ΠΈΠ»ΠΈ Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°ΡΠ”Π°Ρ‚Π° для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ исправлСния:

Π”Π°Ρ‚ΡƒΠ‘Ρ‚Ρ€ΠΎΠΊΠΎΠΉ = Π€ΠΎΡ€ΠΌΠ°Ρ‚(Π”Π°Ρ‚Π°,"Π”Π€=yyyy-MM-dd");

НоваяДата = Π”Π°Ρ‚Π°(Π”Π°Ρ‚ΡƒΠ‘Ρ‚Ρ€ΠΎΠΊΠΎΠΉ); // Π―Π²Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

Как ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π² 1Π‘ 7.7?

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 7.7 массивы ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· явноС созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ массива ΠΈ поэлСмСнтноС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠœΠ°ΡΡΠΈΠ²(ΠœΠ°ΡΡΠ˜ΡΡ‚, МассРСз)

Π Π°Π·ΠΌΠ΅Ρ€ = ΠœΠ°ΡΡΠ˜ΡΡ‚.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°;

МассРСз = Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΠžΠ±ΡŠΠ΅ΠΊΡ‚("Массив");

Для сч = 1 По Π Π°Π·ΠΌΠ΅Ρ€ Π¦ΠΈΠΊΠ»

МассРСз.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠœΠ°ΡΡΠ˜ΡΡ‚[сч]);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² 7.7 Π½Π΅Ρ‚ встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ копирования β€” всС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ придётся ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ массива ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ БоотвСтствия?

Π”Π°, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ копирования ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ:

  • Массив: Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ поэлСмСнтного копирования (Ссли Π½ΡƒΠΆΠ½ΠΎ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅).
  • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°: МоТно ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (с 8.3.4), Π½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры останутся ΠΎΠ±Ρ‰ΠΈΠΌΠΈ.
  • БоотвСтствиС: Аналогично структурС, Π½ΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ явно, Ссли ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ копирования Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("ΠšΠ»ΡŽΡ‡1, ΠšΠ»ΡŽΡ‡2", 1,"Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅");

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠšΠΎΠΏΠΈΡ = ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»); // Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с 8.3.4