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

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

Если Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для удалСния Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ², элСмСнтов ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΈΠ»ΠΈ очистки массива с сохранСниСм порядка β€” здСсь Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° с пояснСниями. ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ протСстированы Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·Π°Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20+.

1. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎ индСксу

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива Π² 1Π‘ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() ΠΈ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(). Однако этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ограничСния: ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для массивов с фиксированной Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния индСксами.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для удалСния элСмСнта ΠΏΠΎ извСстному индСксу:

Массив = Новый Массив(5); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ массив ΠΈΠ· 5 элСмСнтов

Массив[0] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚1";

Массив[1] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚2";

Массив[2] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚3"; // Π­Ρ‚ΠΎΡ‚ элСмСнт ΡƒΠ΄Π°Π»ΠΈΠΌ

Массив[3] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚4";

Массив[4] = "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚5";

// УдаляСм элСмСнт с индСксом 2

Π˜Π½Π΄Π΅ΠΊΡΠ”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ = 2;

Для Π‘Ρ‡ = Π˜Π½Π΄Π΅ΠΊΡΠ”Π»ΡΠ£Π΄Π°Π»Π΅Π½ΠΈΡ По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() - 1 Π¦ΠΈΠΊΠ»

Массив[Π‘Ρ‡] = Массив[Π‘Ρ‡ + 1];

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

// УмСньшаСм Ρ€Π°Π·ΠΌΠ΅Ρ€ массива

Массив.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠ’Π“Ρ€Π°Π½ΠΈΡ†Ρƒ(Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() - 1);

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

2. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ (с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ)

Частая Π·Π°Π΄Π°Ρ‡Π° β€” ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· массива всС элСмСнты, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ. НапримСр, ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ пустых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строки, содСрТащиС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ тСкст. Для этого ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ массив.

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

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив;

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π”Π°Π½Π½Ρ‹Π΅1");

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("");

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π”Π°Π½Π½Ρ‹Π΅2");

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("");

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π”Π°Π½Π½Ρ‹Π΅3");

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ массив Π±Π΅Π· пустых элСмСнтов

Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив;

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² Π¦ΠΈΠΊΠ»

Если НЕ ΠŸΡƒΡΡ‚Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

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

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

Для слоТных условий Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбда-выраТСния (доступны Π² 1Π‘ 8.3.14+):

УсловиС = "(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) => НЕ ΠŸΡƒΡΡ‚Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) И НачинаСтсяБтрока(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ""ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ_"")";

ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ(УсловиС);

ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов БохраняСт порядок
Π¦ΠΈΠΊΠ» с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ O(n) Π”Π° Π”Π°
Лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ O(n) Π”Π° (с 8.3.14) Π”Π°
Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ массив O(n) Π”Π° Π”Π°
ΠœΠ΅Ρ‚ΠΎΠ΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠ•ΡΠ»ΠΈ() O(n) НСт (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для БпискаЗначСний) НСт
πŸ’‘

Для массивов структур ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Если Π’ΠΈΠΏΠ—Π½Ρ‡(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) = Π’ΠΈΠΏ("Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°") Π’ΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ условий β€” это ΡƒΠ±Π΅Ρ€Π΅ΠΆΠ΅Ρ‚ ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ нСсоотвСтствии Ρ‚ΠΈΠΏΠΎΠ².

3. Π Π°Π±ΠΎΡ‚Π° с массивами структур: особСнности удалСния

ΠœΠ°ΡΡΠΈΠ²Ρ‹ структур Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ особого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ каТдая структура ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ мноТСство свойств. Главная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€” сохранСниС цСлостности Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ удалСния структуры ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°:

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ = Новый Массив;

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°1 = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Имя, Возраст", "Иван", 30);

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°2 = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Имя, Возраст", "ΠŸΠ΅Ρ‚Ρ€", 25);

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°3 = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Имя, Возраст", "Π‘Π΅Ρ€Π³Π΅ΠΉ", 30);

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°1);

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°2);

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°3);

// УдаляСм всС структуры, Π³Π΄Π΅ Возраст = 30

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

Для КаТдого Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Из ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ Π¦ΠΈΠΊΠ»

Если Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Возраст <> 30 Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°);

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

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

  • πŸ” Для поиска ΠΏΠΎ нСскольким ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ И Π² условии: Если Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ΠšΠ»ΡŽΡ‡1 = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 И Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ΠšΠ»ΡŽΡ‡2 = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2 Π’ΠΎΠ³Π΄Π°
  • πŸ”„ ΠŸΡ€ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ структур Π²Π½ΡƒΡ‚Ρ€ΠΈ массива измСнСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ (массивы Π² 1Π‘ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ссылкС)
  • πŸ“Œ Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ копирования структур ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°(ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹)
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами структур Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠΎ этому ΠΆΠ΅ массиву. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСпрСдсказуСмому повСдСнию ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ВсСгда создавайтС Π½ΠΎΠ²Ρ‹ΠΉ массив для Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.
Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ структуру ΠΏΠΎ нСскольким условиям?

Для удалСния ΠΏΠΎ нСскольким критСриям ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ условия Ρ‡Π΅Ρ€Π΅Π· логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹:

Если (Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ПолС1 = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 Π˜Π›Π˜ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ПолС2 > Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2)

И НЕ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ПолС3 Π’ΠΎΠ³Π΄Π°

// УдаляСм элСмСнт

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

Для слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ выноситС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

4. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10,000 элСмСнтов стандартныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ становятся нСэффСктивными. Для Ρ‚Π°ΠΊΠΈΡ… случаСв рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  1. ΠœΠ΅Ρ‚ΠΎΠ΄ Π΄Π²ΡƒΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ β€” для удалСния Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π±Π΅Π· сохранСния порядка
  2. Π₯эш-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ β€” для быстрого поиска ΠΈ удалСния элСмСнтов
  3. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‡Π°Π½ΠΊΠΈ β€” ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массива частями ΠΏΠΎ 1000-5000 элСмСнтов

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ удалСния Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² с сохранСниСм порядка:

Ѐункция Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠ”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹(Массив)

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ = Новый БоотвСтствиС;

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

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

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

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, Π˜ΡΡ‚ΠΈΠ½Π°);

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

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

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

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

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

Для массивов Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 50,000 элСмСнтов рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… вмСсто массивов Π² памяти β€” это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сократит ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов.

ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΠ°ΠΌΡΡ‚ΡŒ Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
БоотвСтствиС (Ρ…ΡΡˆ) O(n) Высокая Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ²
Π”Π²Π° указатСля O(n) Низкая Π‘Π΅Π· сохранСния порядка
Π§Π°Π½ΠΊΠΈ O(n) БрСдняя ΠžΡ‡Π΅Π½ΡŒ большиС массивы

5. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ· динамичСских массивов

ДинамичСскиС массивы (созданныС Ρ‡Π΅Ρ€Π΅Π· Новый Массив Π±Π΅Π· указания Ρ€Π°Π·ΠΌΠ΅Ρ€Π°) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(), Π½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ отличаСтся ΠΎΡ‚ статичСских массивов. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ β€” автоматичСскоС сТатиС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ послС удалСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСским массивом:

Π”ΠΈΠ½ΠœΠ°ΡΡΠΈΠ² = Новый Массив;

Π”ΠΈΠ½ΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А");

Π”ΠΈΠ½ΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘");

Π”ΠΈΠ½ΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π’"); // Π­Ρ‚ΠΎΡ‚ элСмСнт ΡƒΠ΄Π°Π»ΠΈΠΌ

Π”ΠΈΠ½ΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π“");

// УдаляСм элСмСнт ΠΏΠΎ индСксу

Π”ΠΈΠ½ΠœΠ°ΡΡΠΈΠ².Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(2); // Π£Π΄Π°Π»ΠΈΡ‚ "Π’"

// Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ["А", "Π‘", "Π“"]

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

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

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

  • πŸ”„ ΠœΠ΅Ρ‚ΠΎΠ΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() автоматичСски сдвигаСт всС элСмСнты Π²ΠΏΡ€Π°Π²ΠΎ ΠΎΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ
  • ⚠️ ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ всСгда ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ с ΠΊΠΎΠ½Ρ†Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пропуска элСмСнтов
  • πŸ“Œ Для массового удалСния эффСктивнСС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив, Ρ‡Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ()

Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ с ΠΊΠΎΠ½Ρ†Π° ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ|Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ массив для массовых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ|ВСстируйтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ послС удалСния-->

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

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов ΠΈΠ· массивов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ:

  1. ИзмСнСниС массива Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΠΎ этому ΠΆΠ΅ массиву β€” ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ пропуску элСмСнтов ΠΈΠ»ΠΈ бСсконСчным Ρ†ΠΈΠΊΠ»Π°ΠΌ
  2. НСучтСнныС пустыС элСмСнты β€” НСопрСдСлСно ΠΈ NULL ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ
  3. ΠŸΠΎΡ‚Π΅Ρ€Ρ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ массивами Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ нСявныС прСобразования
  4. Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти β€” ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами структур

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ исправлСнная вСрсия:

// ΠžΠ¨Π˜Π‘ΠšΠ: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ массива Π² прямом Ρ†ΠΈΠΊΠ»Π΅

Для Π‘Ρ‡ = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если Массив[Π‘Ρ‡] = "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" Π’ΠΎΠ³Π΄Π°

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(Π‘Ρ‡); // ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт!

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

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

// ΠŸΠ ΠΠ’Π˜Π›Π¬ΠΠž: Ρ†ΠΈΠΊΠ» с ΠΊΠΎΠ½Ρ†Π°

Для Π‘Ρ‡ = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() По 0 Π¨Π°Π³ -1 Π¦ΠΈΠΊΠ»

Если Массив[Π‘Ρ‡] = "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" Π’ΠΎΠ³Π΄Π°

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(Π‘Ρ‡);

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (справочников, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· массива Π½Π΅ удаляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ удалСния трСбуСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ транзакция.

7. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹: ΠΊΠΎΠ³Π΄Π° массивы Π½Π΅ подходят

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях вмСсто массивов цСлСсообразнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ 1Π‘:

  • πŸ“‹ БписокЗначСний β€” ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠ•ΡΠ»ΠΈ() ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ
  • πŸ—ƒοΈ БоотвСтствиС β€” для быстрого поиска ΠΈ удалСния ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ (Π°Π½Π°Π»ΠΎΠ³ словаря)
  • πŸ—‚οΈ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” для структурированных Π΄Π°Π½Π½Ρ‹Ρ… с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ
  • πŸ”— Π”Π΅Ρ€Π΅Π²ΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” для иСрархичСских структур

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования БпискаЗначСний для ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ удалСния:

Бписок = Новый БписокЗначСний;

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚1");

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚2");

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠœΠ΅Π½Ρ");

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚3");

// УдаляСм всС элСмСнты Ρ€Π°Π²Π½Ρ‹Π΅ "Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠœΠ΅Π½Ρ"

Бписок.Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠ•ΡΠ»ΠΈ(Новый ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π‘ΠΏΠΈΡΠΊΠ°("Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠœΠ΅Π½Ρ"));

Π’Ρ‹Π±ΠΎΡ€ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ зависит ΠΎΡ‚:

  • Π Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… (Π΄ΠΎ 1000 элСмСнтов β€” массив, большС β€” Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ)
  • НСобходимости поиска ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ (БоотвСтствиС)
  • Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (для частых вставок/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΉ β€” БписокЗначСний)
πŸ’‘

Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ 10,000 записСй всСгда ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΠΉΡ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСноса Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ SQL-запросов вмСсто ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² памяти.

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС пустыС элСмСнты ΠΈΠ· массива Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивно?

Для массивов Π΄ΠΎ 1000 элСмСнтов ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой Ρ†ΠΈΠΊΠ» с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° ΠŸΡƒΡΡ‚Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°() ΠΈΠ»ΠΈ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ(). Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов эффСктивнСС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ БоотвСтствиС с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² массив:

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

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ = Новый БоотвСтствиС;

Для КаТдого Π­Π» Из Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² Π¦ΠΈΠΊΠ»

Если Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ(Π­Π») Π’ΠΎΠ³Π΄Π°

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ(), Π­Π»);

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

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

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

МоТно Π»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива, Π½Π΅ зная Π΅Π³ΠΎ индСкса?

Π”Π°, для этого Π½ΡƒΠΆΠ½ΠΎ:

  1. Найти индСкс элСмСнта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Массив.Найти(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)
  2. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΏΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌΡƒ индСксу

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

ИндСкс = Массив.Найти("Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅");

Если ИндСкс <> НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(ИндСкс);

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

Для массивов структур ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ свойств ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта.

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΈΠ· массива с сохранСниСм порядка?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БоотвСтствиС для отслСТивания ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

Ѐункция Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠ”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹Π‘Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌΠŸΠΎΡ€ΡΠ΄ΠΊΠ°(Массив)

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ = Новый БоотвСтствиС;

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

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

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

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, Π˜ΡΡ‚ΠΈΠ½Π°);

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

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

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

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

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

Для массивов структур Π² качСствС ΠΊΠ»ΡŽΡ‡Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ сочСтаниС ΠΏΠΎΠ»Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· БтрокаБоСдинСния(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ПолС1, "|", Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ПолС2).

Π§Π΅ΠΌ отличаСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· статичСского ΠΈ динамичСского массива?

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ различия:

Π₯арактСристика БтатичСский массив ДинамичСский массив
ΠœΠ΅Ρ‚ΠΎΠ΄ удалСния Π ΡƒΡ‡Π½ΠΎΠ΅ смСщСниС элСмСнтов + Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠ’Π“Ρ€Π°Π½ΠΈΡ†Ρƒ() Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(ИндСкс)
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ МСдлСннСС (O(n) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ удалСния) БыстрСС (внутрСнняя оптимизация)
Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ порядка Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния АвтоматичСскоС сТатиС
Π Π°Π±ΠΎΡ‚Π° Π² Ρ†ΠΈΠΊΠ»Π΅ Высокий риск ошибок БСзопасно ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ
Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты ΠΈΠ· массива ΠΏΠΎ слоТному ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ нСскольким полям структуры)?

Для слоТных условий:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π˜ΡΡ‚ΠΈΠ½Π°/Π›ΠΎΠΆΡŒ
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Ρ‘ Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

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

Ѐункция ΠΡƒΠΆΠ½ΠΎΠ£Π΄Π°Π»ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Возраст > 30 И НачинаСтсяБтрока(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Имя, "А");

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

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

Для КаТдого Π­Π» Из Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² Π¦ΠΈΠΊΠ»

Если НЕ ΠΡƒΠΆΠ½ΠΎΠ£Π΄Π°Π»ΠΈΡ‚ΡŒ(Π­Π») Π’ΠΎΠ³Π΄Π°

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

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

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

Для 1Π‘ 8.3.14+ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбда-выраТСния:

УсловиС = "(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°) =>

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Возраст > 30 И НачинаСтсяБтрока(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Имя, ""А"")";

ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ = Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ(УсловиС);