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

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ нюансам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΡƒΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ: ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с пустыми элСмСнтами, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Для КаТдого ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… коллСкциях, ΠΈ ΠΊΠΎΠ³Π΄Π° стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Пока вмСсто Для. Π’Π°ΠΊΠΆΠ΅ сравним ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ массивов "Π½Π° Π»Π΅Ρ‚Ρƒ".

1. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Ρ†ΠΈΠΊΠ» Для: просто ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ

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

Для ИндСкс = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив[ИндСкс];

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° элСмСнта

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

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ. Π’Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ элСмСнты, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ. Однако Π΅ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ:

  • πŸ”’ Ошибка индСксации: Ссли массив пуст, Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π²Π΅Ρ€Π½Π΅Ρ‚ -1, ΠΈ Ρ†ΠΈΠΊΠ» Π½Π΅ выполнится Π½ΠΈ Ρ€Π°Π·Ρƒ. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° пустоту.
  • ⚑ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Π½Π° массивах с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ элСмСнтов простой Для Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Для КаТдого, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ создаСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
  • ⚠️ ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°: Ссли Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹ добавляСтС ΠΈΠ»ΠΈ удаляСтС элСмСнты, индСксы "ΡΡŠΠ΅Π΄ΡƒΡ‚", Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ пропуску ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….
πŸ’‘

Для ΠΎΠ±Ρ…ΠΎΠ΄Π° массива Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Для ИндСкс = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() По 0 Π¦ΠΈΠΊΠ» с шагом -1. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ бСзопасно ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты "с хвоста".

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСпустых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

Для ИндСкс = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если НЕ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ(Массив[ИндСкс]) Π’ΠΎΠ³Π΄Π°

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ;

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

// Π Π°Π±ΠΎΡ‚Π° с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ элСмСнтом

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

2. Π¦ΠΈΠΊΠ» Для КаТдого: удобство vs ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Для КаТдого ... Из ... Π¦ΠΈΠΊΠ» каТСтся Π±ΠΎΠ»Π΅Π΅ элСгантной, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ избавляСт ΠΎΡ‚ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния индСксами. Она особСнно ΡƒΠ΄ΠΎΠ±Π½Π°, ΠΊΠΎΠ³Π΄Π° порядок ΠΎΠ±Ρ…ΠΎΠ΄Π° Π½Π΅ Π²Π°ΠΆΠ΅Π½, Π° сам элСмСнт массива β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со своими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.ΠœΠ΅Ρ‚ΠΎΠ΄ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ();

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

Однако Ρƒ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ критичСская ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Ρ†ΠΈΠΊΠ»Π° создаСтся врСмСнная пСрСмСнная Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам. На Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (10 000+ элСмСнтов) это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² 2-3 Ρ€Π°Π·Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Для.

Бпособ ΠΎΠ±Ρ…ΠΎΠ΄Π° Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ (мс) Π½Π° 100 000 элСмСнтов ΠŸΠ°ΠΌΡΡ‚ΡŒ (Кб) Удобство
Для с индСксом 120 850 Π‘Ρ€Π΅Π΄Π½Π΅Π΅
Для КаТдого 380 1 200 ВысокоС
Пока с Ρ€ΡƒΡ‡Π½Ρ‹ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ 95 800 НизкоС

Когда стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Для КаТдого:

  • πŸ“Œ Π Π°Π±ΠΎΡ‚Π° с коллСкциями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠžΠ±ΡŠΠ΅ΠΊΡ‚.Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ()), Π³Π΄Π΅ Π²Π°ΠΆΠ΅Π½ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ Π΅Π³ΠΎ позиция.
  • πŸ”„ ΠžΠ±Ρ…ΠΎΠ΄ ассоциативных массивов (БоотвСтствиС), Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ числовыС.
  • πŸ‘¨β€πŸ’» Быстрая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ², Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°.
πŸ“Š Какой Ρ†ΠΈΠΊΠ» Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ для ΠΎΠ±Ρ…ΠΎΠ΄Π° массивов Π² 1Π‘?
Для с индСксом
Для КаТдого
Пока
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ, Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΈ Π΄Ρ€.)

3. Π¦ΠΈΠΊΠ» Пока: ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

Π¦ΠΈΠΊΠ» Пока β€” самый Π³ΠΈΠ±ΠΊΠΈΠΉ инструмСнт, Π½ΠΎ ΠΈ самый опасный. Он позволяСт ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ массив с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ шагом, ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ элСмСнты ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΡΠΊΠ°ΠΊΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· нСсколько ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π·Π° ΠΎΠ΄Π½Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ шаблон:

ИндСкс = 0;

Пока ИндСкс <= Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив[ИндСкс];

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

ИндСкс = ИндСкс + 1; // МоТно ΠΌΠ΅Π½ΡΡ‚ΡŒ шаг динамичСски

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

Π“Π΄Π΅ это Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΎ:

  • πŸ” Поиск с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π³Π΄Π΅ послС спуска Π² Π²Π΅Ρ‚ΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅.
  • πŸ“Š ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сгруппированных Π΄Π°Π½Π½Ρ‹Ρ…: ΠΊΠΎΠ³Π΄Π° массив содСрТит Π±Π»ΠΎΠΊΠΈ элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ‡ΠΊΠ°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ 10 ΡˆΡ‚ΡƒΠΊ).
  • βš™οΈ ДинамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ шага: скаТСм, ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ элСмСнты с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ…ΠΎΠ΄Π° с динамичСским шагом

ИндСкс = 0;

Π¨Π°Π³ = 1;

Пока ИндСкс <= Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если Массив[ИндСкс] = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

Π¨Π°Π³ = 2; // ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт послС пустого

Π˜Π½Π°Ρ‡Π΅

Π¨Π°Π³ = 1;

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[ИндСкс]);

ИндСкс = ИндСкс + Шаг;

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ индСксом Ρ†ΠΈΠΊΠ» Пока ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива. ВсСгда провСряйтС условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ!

4. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ(), Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ(), ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ()

Начиная с вСрсии 8.3.10, Π² 1Π‘ появились Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами, заимствованныС ΠΈΠ· соврСмСнных языков программирования. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ понимания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

  • πŸ”Ή Массив.ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ(Ѐункция) β€” примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠΎ всСм элСмСнтам, Π½Π΅ измСняя исходный массив.
  • πŸ”Ή Массив.Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ(Ѐункция) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ массив с элСмСнтами, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ.
  • πŸ”Ή Массив.ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) β€” добавляСт элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† (Π°Π½Π°Π»ΠΎΠ³ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(), Π½ΠΎ с Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ() для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ:

ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ(Ѐункция(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ > 100;

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  • πŸ“ Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ: ΠΊΠΎΠ΄ описываСт Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π° Π½Π΅ ΠΊΠ°ΠΊ.
  • πŸ”„ Π˜ΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: исходный массив Π½Π΅ измСняСтся, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ.
  • πŸ”— Π¦Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²: ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Массив.Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ(...).ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ(...).
πŸ’‘

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для простых ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π½ΠΎ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (100 000+ элСмСнтов) ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ классичСских Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈΠ·-Π·Π° создания ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² вСрсиях 1Π‘ Π½ΠΈΠΆΠ΅ 8.3.14 ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ() ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ асинхронныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅Π΄ использованиСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с вашСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ.

5. ΠžΠ±Ρ…ΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

Когда массив содСрТит Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π΄Π°Π½Π½Ρ‹Ρ…), трСбуСтся рСкурсивный ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ…ΠΎΠ΄. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” использованиС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°:

Для Π‘Ρ‚Ρ€ΠΎΠΊΠΈ = 0 По ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Для Π‘Ρ‚ΠΎΠ»Π±Ρ†Π° = 0 По ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°[Π‘Ρ‚Ρ€ΠΎΠΊΠ°].Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°[Π‘Ρ‚Ρ€ΠΎΠΊΠ°][Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†];

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

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

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

Для массивов с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JSON-структуры) ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ рСкурсивная функция:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠžΠ±ΠΎΠΉΡ‚ΠΈΠ Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΠΎ(Массив)

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»

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

ΠžΠ±ΠΎΠΉΡ‚ΠΈΠ Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΠΎ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚); // РСкурсивный Π²Ρ‹Π·ΠΎΠ²

Π˜Π½Π°Ρ‡Π΅

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠ³ΠΎ элСмСнта

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

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

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

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами:

  • πŸ”’ НСравномСрная Π΄Π»ΠΈΠ½Π° строк: Ссли Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, доступ ΠΏΠΎ индСксу ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ВсСгда провСряйтС Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ уровня.
  • πŸ”„ ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ссылкС: ΠΏΡ€ΠΈ присваивании ΠΠΎΠ²Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылки Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы. Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ копирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ().
  • πŸ“Š ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠΎΠ±Ρ…ΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ элСмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘Π£Π‘Π” ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ всСх ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ|Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Π΄Π°Π½Π½Ρ‹Ρ…|ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ рСкурсии|ΠŸΡ€ΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ пустых элСмСнтов

-->

6. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±Ρ…ΠΎΠ΄Π°: совСты для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов Π΄Π°ΠΆΠ΅ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя выполнСния Π² Ρ€Π°Π·Ρ‹. Π’ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ:

  1. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Для КаТдого Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… коллСкциях β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Для с индСксом.
  2. ΠšΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°(): вычисляйтС Π³Ρ€Π°Π½ΠΈΡ†Ρƒ массива ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ, Π° Π½Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:
    Π“Ρ€Π°Π½ΠΈΡ†Π° = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°();
    

    Для ИндСкс = 0 По Π“Ρ€Π°Π½ΠΈΡ†Π° Π¦ΠΈΠΊΠ»

    // ...

  3. ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°: выноситС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ вычислСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, доступ ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π°.
  4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… объСмом >100 000 элСмСнтов. 1Π‘ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π£Π‘Π”, Π° Π½Π΅ с массивами Π² памяти.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для суммирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

Π‘ΡƒΠΌΠΌΠ° = 0;

Π“Ρ€Π°Π½ΠΈΡ†Π° = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°();

Для ИндСкс = 0 По Π“Ρ€Π°Π½ΠΈΡ†Π° Π¦ΠΈΠΊΠ»

// ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ всС элСмСнты - числа

Π‘ΡƒΠΌΠΌΠ° = Π‘ΡƒΠΌΠΌΠ° + Массив[ИндСкс];

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

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

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

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ массивов. Π’ΠΎΡ‚ самыС распространСнныС:

Ошибка ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ
Π’Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива ИспользованиС ТСстко Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ индСкса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Массив[100]) Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°(). ВсСгда провСряйтС Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΠ΅Ρ€Π΅Π΄ доступом ΠΏΠΎ индСксу.
ИзмСнСниС массива Π² Ρ†ΠΈΠΊΠ»Π΅ Для КаТдого Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСпрСдсказуСмому повСдСнию ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π‘Π½Π°Ρ‡Π°Π»Π° собСритС индСксы для удалСния, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅.
НСучСт пустых элСмСнтов ΠŸΡ€ΠΎΠΏΡƒΡΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ() ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с НСопрСдСлСно ΠΈΠ»ΠΈ NULL. Π―Π²Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ пустыС значСния ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ() для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного удалСния элСмСнтов:

// 1. Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ индСксы для удалСния

Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ = Новый Массив;

Для ИндСкс = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если Массив[ИндСкс] = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ИндСкс);

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

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

// 2. УдаляСм с ΠΊΠΎΠ½Ρ†Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ индСксы

Для ИндСкс = Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() По 0 Π¦ΠΈΠΊΠ»

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(Π˜Π½Π΄Π΅ΠΊΡΡ‹Π”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ[ИндСкс]);

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

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° типичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” нСявноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Ссли массив содСрТит строки ΠΈ числа, опСрация сравнСния ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ:

Если Массив[ИндСкс] = 10 Π’ΠΎΠ³Π΄Π° // Π‘Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для строки "10"!

ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ явноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² (Число(), Π‘Ρ‚Ρ€ΠΎΠΊΠ°()) ΠΈΠ»ΠΈ строгиС сравнСния.

FAQ: ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° частыС вопросы

Как ΠΎΠ±ΠΎΠΉΡ‚ΠΈ массив Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» Для с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ шагом:

Для ИндСкс = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() По 0 Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[ИндСкс]);

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

Или Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ() (доступСн с вСрсии 8.3.14):

Массив.ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ().ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ(Ѐункция(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚)

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

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

МоТно Π»ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ массив, ΠΏΠΎΠΊΠ° ΠΈΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅?

НСт! 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с массивами. Если массив измСняСтся Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ внСшнСй ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅, ΠΎΠ±Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам чтСния ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ StandardLibrary).

Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ…ΠΎΠ΄Π° самый быстрый для массива ΠΈΠ· 1 000 000 элСмСнтов?

По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ тСстов Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 8.3.20:

  1. Для с индСксом ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ β€” ~0.5 сСк.
  2. Пока с Ρ€ΡƒΡ‡Π½Ρ‹ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ β€” ~0.6 сСк.
  3. Для КаТдого β€” ~1.8 сСк.
  4. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ()) β€” ~2.3 сСк.

Для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°Π΄Π°Ρ‡ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Для ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Как ΠΎΠ±ΠΎΠΉΡ‚ΠΈ массив, Ссли ΠΎΠ½ содСрТит НСопрСдСлСно?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ:

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ;

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

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

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

Или Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ():

ΠžΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Массив.Π‘ΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ(Ѐункция(Π­Π») Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π» <> НСопрСдСлСно ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ);
МоТно Π»ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся свойством ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°?

Π”Π°, Π½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ Π΄Π²Π° нюанса:

  1. Если свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Π° Π½Π΅ ΠΏΠΎ ссылкС), Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ систСму. ΠšΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.
  2. Если массив измСняСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события), ΠΎΠ±Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ массив ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного ΠΎΠ±Ρ…ΠΎΠ΄Π°:

МассивКопия = ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Π‘Π²ΠΎΠΉΡΡ‚Π²ΠΎΠœΠ°ΡΡΠΈΠ².ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ();

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из МассивКопия Π¦ΠΈΠΊΠ»

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

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