Π Π°Π±ΠΎΡ‚Π° с Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ значСниями являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ очистки Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ записСй, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ критСриям. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ критичСскому сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы, особСнно ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими объСмами ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

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

Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ особСнностСй индСксации строк ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ β€” самая частая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ошибок Π² ΠΊΠΎΠ΄Π΅. МногиС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ программисты ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ стандартный Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ пропуску элСмСнтов ΠΈΠ»ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта. ПониманиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² 1Π‘ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΈ эффСктивный ΠΊΠΎΠ΄.

Базовая структура ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ прСдставляСт собой упорядочСнный Π½Π°Π±ΠΎΡ€ строк, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит поля ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Для управлСния составом этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° прСдоставляСт ряд встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ инструмСнтом для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ записи являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ индСкс удаляСмой строки.

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

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

πŸ’‘

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ всСгда провСряйтС свойство ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ индСксам, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ ошибка ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅

Рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ сцСнарий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС строки, Π³Π΄Π΅ ΠΏΠΎΠ»Π΅ "Π‘ΡƒΠΌΠΌΠ°" мСньшС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ³Π°. Π˜Π½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ каТСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» Для ΠΎΡ‚ нуля Π΄ΠΎ количСства строк. Однако, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ удаляСтся строка с индСксом i, строка с индСксом i+1 становится строкой с индСксом i.

Π¦ΠΈΠΊΠ» ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счСтчик, ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ итСрация обращаСтся ΠΊ индСксу i+1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° строку, ΡΡ‚ΠΎΡΠ²ΡˆΡƒΡŽ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, каТдая вторая строка, подлСТащая ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ, остаСтся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ эффСкт называСтся "смСщСниСм индСксов" ΠΈ являСтся классичСской ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с динамичСскими массивами Π² любом языкС программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ встроСнный язык 1Π‘.

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ для удалСния строк Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π°. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС выполнСния "ИзмСнСниС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ", Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ структуры ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ±Ρ…ΠΎΠ΄Π°.
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ удалСния Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
Π¦ΠΈΠΊΠ» с ΠΊΠΎΠ½Ρ†Π°
Π€ΠΈΠ»ΡŒΡ‚Ρ€
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΎΡ‚Π±ΠΎΡ€ΠΎΠΌ

ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ удалСния строк

БущСствуСт нСсколько ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… способов бСзопасного удалСния записСй. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ самый распространСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” использованиС Ρ†ΠΈΠΊΠ»Π° Для Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. Π’Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ с индСкса, Ρ€Π°Π²Π½ΠΎΠ³ΠΎ Π’Π°Π±Π»ΠΈΡ†Π°.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1, ΠΈ Π΄Π²ΠΈΠ³Π°Π΅Ρ‚Π΅ΡΡŒ Π΄ΠΎ нуля Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’ этом случаС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ строки Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ сказываСтся Π½Π° индСксах ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… элСмСнтов.

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

Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π€ΠΈΠ»ΡŒΡ‚Ρ€. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ удаляСт строки Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΎΡ‚Π±ΠΎΡ€Ρƒ. ЀактичСски Π²Ρ‹ замСняСтС ΡΡ‚Π°Ρ€ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ копию. Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈ бСзопасный способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ.

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

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

ИспользованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π€ΠΈΠ»ΡŒΡ‚Ρ€ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

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

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

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

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠžΡ‚Π±ΠΎΡ€Π° = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("НомСнклатура", БсылкаНаВовар);

НоваяВаблица = Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ’Π°Π±Π»ΠΈΡ†Π°.Π€ΠΈΠ»ΡŒΡ‚Ρ€(Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°ΠžΡ‚Π±ΠΎΡ€Π°);

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

πŸ’‘

ΠœΠ΅Ρ‚ΠΎΠ΄ Π€ΠΈΠ»ΡŒΡ‚Ρ€ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для удалСния большого количСства строк, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

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

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

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ сравнСниС характСристик Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π΄Π΅ΡΡŒ учитываСтся ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ (Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ объСм)
Π¦ΠΈΠΊΠ» с ΠΊΠΎΠ½Ρ†Π° Низкая МинимальноС Низкая (O(N^2))
Π¦ΠΈΠΊΠ» Пока БрСдняя МинимальноС Низкая (O(N^2))
ΠœΠ΅Ρ‚ΠΎΠ΄ Π€ΠΈΠ»ΡŒΡ‚Ρ€ Минимальная ВысокоС (копия) Высокая (O(N))
Запрос ΠΊ Π’Π’ Высокая Π‘Ρ€Π΅Π΄Π½Π΅Π΅ ΠžΡ‡Π΅Π½ΡŒ высокая

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…, асимптотичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ стрСмится ΠΊ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρƒ ΠΎΡ‚ количСства элСмСнтов ΠΈΠ·-Π·Π° постоянного сдвига ячССк памяти. ΠœΠ΅Ρ‚ΠΎΠ΄ Π€ΠΈΠ»ΡŒΡ‚Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ, проходя ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Ρ‚Π°Π±Π»ΠΈΡ†, содСрТащих Π±ΠΎΠ»Π΅Π΅ 1000 строк, использованиС Ρ†ΠΈΠΊΠ»ΠΎΠ² с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ считаСтся Π΄ΡƒΡ€Π½Ρ‹ΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ Π² ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ†ΠΈΠΊΠ» ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ?

КаТдоС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ строки Π² массивС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ копирования всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Π²Π΅Ρ€Ρ…. Если ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ 1000 строк ΠΈΠ· 10000, суммарноС количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ копирования Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΡ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°: Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ запросы

Когда объСм Π΄Π°Π½Π½Ρ‹Ρ… становится Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (сотни тысяч ΠΈΠ»ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ строк), Π΄Π°ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСдостаточно быстро ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ памяти клиСнтского прилоТСния. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся пСрСнос Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° сторону сСрвСра Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ языка запросов 1Π‘.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос с условиСм НЕ (ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ строки) ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π‘Π£Π‘Π” (SqlServer, PostgreSQL, Oracle) ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с Π½ΠΈΠΌΠΈ Π½Π° порядки быстрСС, Ρ‡Π΅ΠΌ встроСнный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ 1Π‘.

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΈ возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π‘Π£Π‘Π”. ВсСгда свСряйтС синтаксис запросов с Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ для вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

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

МоТно Π»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ строки Π² Ρ†ΠΈΠΊΠ»Π΅ "Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ"?

НСт, это катСгоричСски Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ "ИзмСнСниС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π²ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ". Для удалСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ с индСксами ("Для" ΠΈΠ»ΠΈ "Пока") Π»ΠΈΠ±ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π€ΠΈΠ»ΡŒΡ‚Ρ€.

Π§Ρ‚ΠΎ происходит с индСксами строк послС удалСния?

ПослС удалСния строки с индСксом N, всС строки с индСксами большС N ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Π½ΠΈΠ·. Π‘Ρ‚Ρ€ΠΎΠΊΠ° с индСксом N+1 ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ индСкс N, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ быстрСС: Ρ†ΠΈΠΊΠ» с ΠΊΠΎΠ½Ρ†Π° ΠΈΠ»ΠΈ Π€ΠΈΠ»ΡŒΡ‚Ρ€?

Для ΠΌΠ°Π»Ρ‹Ρ… объСмов Π΄Π°Π½Π½Ρ‹Ρ… (Π΄ΠΎ 100-200 строк) Ρ€Π°Π·Π½ΠΈΡ†Π° Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Π°. Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΌΠ΅Ρ‚ΠΎΠ΄ Π€ΠΈΠ»ΡŒΡ‚Ρ€ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ сдвига элСмСнтов памяти, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ для Ρ†ΠΈΠΊΠ»Π°.

Как ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ?

Π‘Π°ΠΌΡ‹ΠΉ простой способ β€” Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ(). Он ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ удаляСт всС строки ΠΈ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π΅ трСбуя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈΠ»ΠΈ условий.

МоТно Π»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ строки?

НСт, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ. Если трСбуСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Ρ‚Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с рСгистрами.