Π Π°Π±ΠΎΡ‚Π° с коллСкциями Π΄Π°Π½Π½Ρ‹Ρ… являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ΠΎΠΌ алгоритмичСского программирования Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ очистки списка ΠΎΡ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… элСмСнтов, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…. ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ эффСктивно ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строку ΠΈΠ· массива, критичСски Π²Π°ΠΆΠ½ΠΎ для написания ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

БущСствуСт нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ этой Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свои Π½ΡŽΠ°Π½ΡΡ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ области примСнСния. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ логичСским ошибкам, пропуску элСмСнтов ΠΈΠ»ΠΈ сущСствСнному замСдлСнию Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ основныС способы манипуляции массивами.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ массивов Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘

Массив Π² языкС запросов ΠΈ встроСнном языкС 1Π‘ прСдставляСт собой ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ осущСствляСтся ΠΏΠΎ числовому индСксу. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ всСгда начинаСтся с нуля, Ρ‡Ρ‚ΠΎ являСтся стандартом для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° соврСмСнных языков программирования.

Когда Π²Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚Π΅ процСсс удалСния, систСма Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Π²Π΅Ρ€Ρ…. Π­Ρ‚ΠΎ дСйствиС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов, врСмя выполнСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прямо ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ количСству ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ элСмСнтов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² высоконагруТСнных конфигурациях Π²Ρ‹Π±ΠΎΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° становится вопросом ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Рассмотрим Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис объявлСния. Π’Ρ‹ создаСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Массив ΠΈ наполняСтС Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎ индСксу, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π½ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° прСдоставляСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для прямой ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ структуры "Π½Π° мСстС".

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΡΠΌΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС "ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°". ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ индСксный Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ создавайтС Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ.

πŸ’‘

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами (Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов) ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ частых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вставки ΠΈ удалСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ рост Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с использованиСм Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ

НаиболСС распространСнным способом удалСния элСмСнта являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ индСкс удаляСмого элСмСнта ΠΈ количСство удаляСмых элСмСнтов (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ физичСски измСняСт исходный массив, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ сдвигая хвост ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

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

РСшСниСм являСтся ΠΏΡ€ΠΎΡ…ΠΎΠ΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ β€” ΠΎΡ‚ послСднСго элСмСнта ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ. Π’ этом случаС смСщСниС индСксов Π½Π΅ влияСт Π½Π° Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ элСмСнты, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ находятся "слСва" ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

Для ИндСкс = Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 По 0 Π¦ΠΈΠΊΠ»

Если Массив[ИндСкс] = ЗначСниСДляУдалСния Π’ΠΎΠ³Π΄Π°

Массив.Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ(ИндСкс, 1);

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

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

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈ структура массива Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡΡ. Однако стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ всС Π΅Ρ‰Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ копирования памяти для пСрСмСщСния элСмСнтов, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΈ частых удалСниях Π² Π½Π°Ρ‡Π°Π»Π΅ массива.

β˜‘οΈ Алгоритм бСзопасного удалСния

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ массива (Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ)

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈ часто Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² создании Π½ΠΎΠ²ΠΎΠ³ΠΎ массива, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ сохранСния. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅: вмСсто измСнСния состояния старого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ, ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ мусора.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со смСщСниСм индСксов. Π’Ρ‹ просто Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ исходный массив ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² Π½ΠΎΠ²Ρ‹ΠΉ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ прСдсказуСмым ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, особСнно для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² 1Π‘.

НСдостатком являСтся ΡƒΠ΄Π²ΠΎΠ΅Π½ΠΈΠ΅ потрСблСния памяти Π½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ старый, ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ массив. Для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ срСдних ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ это Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти сСрвСра это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠΌ мСстом.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· созданиС Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ:

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

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

Если НС Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ Π’ΠΎΠ³Π΄Π°

ΠΠΎΠ²Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

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

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

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = ΠΠΎΠ²Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²;

ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½ΠΎΠ²Ρ‹ΠΉ массив являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых быстрых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² 1Π‘, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сдвига Π΄Π°Π½Π½Ρ‹Ρ…. Если ваша Π·Π°Π΄Π°Ρ‡Π° β€” ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ лишь ΠΌΠ°Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ элСмСнтов, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ.

πŸ’‘

ΠœΠ΅Ρ‚ΠΎΠ΄ создания Π½ΠΎΠ²ΠΎΠ³ΠΎ массива ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 30% элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ пСрСмСщСния памяти.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π½Π° мСстС ΠΈ созданиСм ΠΊΠΎΠΏΠΈΠΈ зависит ΠΎΡ‚ объСма Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° удаляСмых строк. Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания влияния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π½Π° врСмя выполнСния ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·.

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всСго ΠΎΠ΄ΠΈΠ½ элСмСнт ΠΈΠ· ΠΊΠΎΠ½Ρ†Π° массива, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΌ. Однако, Ссли Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠ· массива Π² 100 000 строк, систСмС придСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ 99 999 ссылок. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ всСгда ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ массиву ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ (ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ») ΠœΠ΅Ρ‚ΠΎΠ΄ Нового Массива РСкомСндация
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ 1 элСмСнта ΠΈΠ· ΠΊΠΎΠ½Ρ†Π° ΠžΡ‡Π΅Π½ΡŒ быстро Быстро (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх) Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ 50% элСмСнтов Π‘Ρ€Π΅Π΄Π½Π΅ (ΠΌΠ½ΠΎΠ³ΠΎ сдвигов) Быстро (Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄) Новый массив
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ 90% элСмСнтов МСдлСнно ΠžΡ‡Π΅Π½ΡŒ быстро Новый массив
ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π­ΠΊΠΎΠ½ΠΎΠΌΠ½ΠΎ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ 2x памяти Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ сущСствуСт. Π’ Π·Π°Π΄Π°Ρ‡Π°Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ критичСски Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Часто Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ "Π½ΠΎΠ²ΠΎΠ³ΠΎ массива" ΠΈΠ·-Π·Π° Π΅Π³ΠΎ читаСмости, прСнСбрСгая Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌΠΈ памяти, Ρ‡Ρ‚ΠΎ допустимо Π² Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… конфигурациях.

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

πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ удалСния Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅
БозданиС нового массива
Π€ΠΈΠ»ΡŒΡ‚Ρ€ Ρ‡Π΅Ρ€Π΅Π· запрос
НС ΡƒΠ΄Π°Π»ΡΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΡƒ

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΈΠ· массива

Частной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ удалСния являСтся очистка массива ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π—Π΄Π΅ΡΡŒ Π»ΠΎΠ³ΠΈΠΊΠ° услоТняСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ элСмСнты ΠΌΠ΅ΠΆΠ΄Ρƒ собой. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΡƒΠ±Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ слоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° O(N^2), Ρ‡Ρ‚ΠΎ нСдопустимо для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….

НаиболСС эффСктивным способом удалСния Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π² 1Π‘ являСтся использованиС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, БоотвСтствиС (HashMap) ΠΈΠ»ΠΈ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΈ структуры ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ быстрый поиск ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, позволяя ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΎΡΡŒ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅, Π·Π° врСмя O(1) ΠΈΠ»ΠΈ O(log N).

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

Π’Π— = Новый Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;

Π’Π—.Колонки.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅");

Π’Π—.Колонки["Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅"].Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ = Π˜ΡΡ‚ΠΈΠ½Π°;

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

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

Π’Π—.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ().Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π­Π»Π΅ΠΌΠ΅Π½Ρ‚;

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ, это Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

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

ПослС заполнСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² массив, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² чистый список ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ являСтся стандартным ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ слоТных ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ….

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (структур, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ) ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ сравнСниС происходит ΠΏΠΎ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Π²Π°ΠΌ ΠΊΠ»ΡŽΡ‡Ρƒ, Π° Π½Π΅ ΠΏΠΎ ссылкС Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² памяти.

Π Π°Π±ΠΎΡ‚Π° с массивом структур ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Когда массив содСрТит Π½Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (числа, строки), Π° слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΎΠ³ΠΈΠΊΠ° удалСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого внимания. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидаСтся.

Π’ 1Π‘ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ структуры с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ Ρ€Π°Π²Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΏΡ€ΠΈ прямом сравнСнии, Ссли это Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ явно. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ "ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ" часто замСняСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ "ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ". Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнт считаСтся лишним.

НапримСр, Ссли Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· массива структур всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² с пустым ИНН, условиС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ свойство:

Если Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ИНН = "" Π’ΠΎΠ³Π΄Π°

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π³ΠΈΠ±ΠΊΠΈΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ условия, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ И, Π˜Π›Π˜, НЕ. Π­Ρ‚ΠΎ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ нСпосрСдствСнно Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Нюанс сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ сравнСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ (БправочникБсылка) происходит ΠΏΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ. Π”Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ GUID Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ элСмСнтами.

ЧастыС ошибки ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°

Одной ΠΈΠ· самых распространСнных ошибок являСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π½Π΅ΠΉ Π² прямом порядкС. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ послС удалСния элСмСнта с индСксом i, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт сдвигаСтся Π½Π° мСсто i, Π° счСтчик Ρ†ΠΈΠΊΠ»Π° увСличиваСтся Π΄ΠΎ i+1. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ элСмСнт Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ i (Π±Ρ‹Π²ΡˆΠΈΠΉ i+1) Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ провСряСтся.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ошибка связана с Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ расчСтом Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ†ΠΈΠΊΠ»Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ индСксация начинаСтся с нуля, послСдний элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ индСксу, Ρ€Π°Π²Π½ΠΎΠΌΡƒ количСству элСмСнтов, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°".

  • πŸ”΄ Ошибка: ИспользованиС Ρ†ΠΈΠΊΠ»Π° Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ с ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ удалСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта.
  • πŸ”΄ Ошибка: Π—Π°Π±Ρ‹Π²Π°Π½ΠΈΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ индСкс ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π² прямом Ρ†ΠΈΠΊΠ»Π΅.
  • πŸ”΄ Ошибка: ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· пустого массива Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() > 0.

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ситуаций рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ останова Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ массива Π² ΠΎΠΊΠ½Π΅ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ индСксов ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстро Π½Π°ΠΉΡ‚ΠΈ логичСский Ρ€Π°Π·Ρ€Ρ‹Π².

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

МоТно Π»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ» "Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ"?

НСт, Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ нСльзя. Π¦ΠΈΠΊΠ» "Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ" ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ структуры ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π²ΠΎ врСмя ΠΎΠ±Ρ…ΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. НСобходимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΏΠΎ индСксу ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив.

Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ быстрСС: Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ массив?

Если удаляСтся ΠΌΠ°Π»ΠΎ элСмСнтов (ΠΌΠ΅Π½Π΅Π΅ 10-20%) ΠΈ ΠΎΠ½ΠΈ находятся Π² ΠΊΠΎΠ½Ρ†Π΅ массива, быстрСС Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ. Если удаляСтся ΠΌΠ½ΠΎΠ³ΠΎ элСмСнтов ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ разбросаны ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ массива, быстрСС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ опСрация сдвига ΠΎΡ‡Π΅Π½ΡŒ дорогая.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС элСмСнты массива?

Π‘Π°ΠΌΡ‹ΠΉ быстрый способ β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ пустой массив: Массив = Новый Массив;. Π­Ρ‚ΠΎ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ старого массива (ΠΏΡ€ΠΈ отсутствии Π΄Ρ€ΡƒΠ³ΠΈΡ… ссылок Π½Π° Π½Π΅Π³ΠΎ) ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ цикличСского удалСния.

Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π½Π΅ зная Π΅Π³ΠΎ индСкса?

НСобходимо сначала Π½Π°ΠΉΡ‚ΠΈ индСкс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Найти(). Если ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Π΅Ρ‚ -1, элСмСнта Π½Π΅Ρ‚. Если Π²Π΅Ρ€Π½Π΅Ρ‚ индСкс, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ(). ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ИндСкс = Массив.Найти(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅); Если ИндСкс <> -1 Π’ΠΎΠ³Π΄Π° Массив.Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ(ИндСкс); ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;