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

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языков, Π³Π΄Π΅ нумСрация ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ (ΠΊΠ°ΠΊ Π² Lua ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях BASIC), Π² языкС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ принята строгая нулСвая систСма индСксации. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт любой упорядочСнной ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ всСгда ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0. Π’Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ индСкс 1, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ β€” 2, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ПослСдний элСмСнт массива ΠΈΠ»ΠΈ списка всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ индСкс, Ρ€Π°Π²Π½Ρ‹ΠΉ количСству элСмСнтов минус Π΅Π΄ΠΈΠ½ΠΈΡ†Π°. ПониманиС этого ΠΏΡ€Π°Π²ΠΈΠ»Π° являСтся ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΊ написанию ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ячСйкам памяти.

Рассмотрим Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ². ΠœΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами, списками Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ вас слоТилась полная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° повСдСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнтам ΠΏΠΎ индСксу.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² массивах ΠΈ списках

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для хранСния упорядочСнных Π΄Π°Π½Π½Ρ‹Ρ… Π² 1Π‘ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Массив. ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ массива, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π°Π΄Π°Π½Π° Π»ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ сразу ΠΈΠ»ΠΈ ΠΎΠ½ наполняСтся динамичСски, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ: доступ ΠΊ элСмСнтам осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· цСлочислСнныС индСксы, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с нуля. Если Π²Ρ‹ объявили массив ΠΈΠ· 5 элСмСнтов, Ρ‚ΠΎ допустимыС индСксы для Π½Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 4. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту с индСксом 5 Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ runtime-ΠΎΡˆΠΈΠ±ΠΊΡƒ.

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

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок Β«Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†ΡƒΒ» (off-by-one errors). ΠœΠ΅Ρ‚ΠΎΠ΄ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() (ΠΈΠ»ΠΈ свойство ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π² Π½ΠΎΠ²Ρ‹Ρ… вСрсиях) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ число элСмСнтов. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс послСднСго элСмСнта, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈΠ· этого значСния. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этого простого матСматичСского дСйствия β€” самая распространСнная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° сбоСв Π² Ρ†ΠΈΠΊΠ»Π°Ρ…, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π΄ΠΎ условия «мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ количСству».

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ использовании ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массива индСксы ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ. Если Π²Ρ‹ удаляСтС элСмСнт с индСксом 2, Ρ‚ΠΎ Π±Ρ‹Π²ΡˆΠΈΠΉ элСмСнт с индСксом 3 становится элСмСнтом с индСксом 2. ΠŸΡ€ΠΎΠΏΡƒΡΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½, Ссли Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ счСтчик Ρ†ΠΈΠΊΠ»Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

πŸ’‘

ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» «Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎΒ» (ForEach) вмСсто Ρ†ΠΈΠΊΠ»Π° «Для» (For), Ссли Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ числовой индСкс элСмСнта. Π­Ρ‚ΠΎ автоматичСски ΠΈΠ·Π±Π°Π²ΠΈΡ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ ΠΈ сдвигами индСксов ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π’Π°Π±Π»ΠΈΡ†Π΅ΠΉΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

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

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ячСйкам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ двойная индСксация: сначала указываСтся строка, Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°. Бинтаксис выглядит ΠΊΠ°ΠΊ Π’Π°Π±Π»ΠΈΡ†Π°[Π˜Π½Π΄Π΅ΠΊΡΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ][ИмяКолонки] ΠΈΠ»ΠΈ Π’Π°Π±Π»ΠΈΡ†Π°[Π˜Π½Π΄Π΅ΠΊΡΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ][ИндСксКолонки]. Числовая нумСрация ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ структуры ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ порядка добавлСния ΠΏΠΎΠ»Π΅ΠΉ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ ошибки. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ· запроса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ 100 строк. ΠŸΡ‹Ρ‚Π°ΡΡΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ послСднюю запись, ΠΎΠ½ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ строкС 100. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нумСрация ΠΈΠ΄Π΅Ρ‚ с 0, послСдняя строка ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 99. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ 100-ΠΌΡƒ индСксу ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡŽ выполнСния скрипта. Для Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условиС строгого нСравСнства.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π’Π°Π±Π»ΠΈΡ†Π΅ΠΉΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

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

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ индСксации Π² Ρ€Π°Π·Π½Ρ‹Ρ… языках ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…

ΠŸΡƒΡ‚Π°Π½ΠΈΡ†Π° с Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρƒ спСциалистов, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… срСдах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ ΠΌΠΈΡ€Π΅ программирования Π½Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ стандарта, ΠΈ 1Π‘ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊ языкам сСмСйства C, Java, Python ΠΈ JavaScript, Π³Π΄Π΅ принят отсчСт с нуля. Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ срСды, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Visual Basic (классичСский), Lua ΠΈΠ»ΠΈ MATLAB, Π³Π΄Π΅ массивы ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹.

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

Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ / Π―Π·Ρ‹ΠΊ ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ индСкс ПослСдний индСкс (для N элСмСнтов) Випичная ошибка
1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 0 N - 1 ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ N
Python / C++ / Java 0 N - 1 ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ N
Visual Basic (Classic) 1 N ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ 0
Lua 1 N ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ 0
Excel (VBA ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) 1 N ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ 0

ПониманиС этих Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ особСнно Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ 1Π‘ с внСшними систСмами Ρ‡Π΅Ρ€Π΅Π· COM-соСдинСниС ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ написании Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках. Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ массив ΠΈΠ· 1Π‘ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ трансформация Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ обращСния.

πŸ“Š Π‘ ΠΊΠ°ΠΊΠΈΠΌ языком программирования Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π΄ΠΎ изучСния 1Π‘?
C++ / Java / C#
Visual Basic / VBA
Python
PHP / JavaScript
Π”Ρ€ΡƒΠ³ΠΎΠΉ / НС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π»

Π Π°Π±ΠΎΡ‚Π° с иСрархичСскими структурами ΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ

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

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΡƒΠ·Π»ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Π”Π΅Ρ€Π΅Π²Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ индСксы сосСдСй ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Если Π²Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ ссылки Π½Π° элСмСнты Ρ‡Π΅Ρ€Π΅Π· ΠΈΡ… числовыС индСксы Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, эти ссылки ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌΠΈ послС измСнСния структуры Π΄Π΅Ρ€Π΅Π²Π°. ВсСгда ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылки Π½Π° сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ·Π»ΠΎΠ².

ΠΡŽΠ°Π½ΡΡ‹ индСксации Π² запросах ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°Ρ…

Π₯отя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°Π˜Π·Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Π—Π°ΠΏΡ€ΠΎΡΠ° Π½Π΅ являСтся массивом Π² чистом Π²ΠΈΠ΄Π΅ ΠΈ пСрСбираСтся Ρ†ΠΈΠΊΠ»ΠΎΠΌ «Пока», ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запроса Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ массив нумСрация снова становится Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ. ΠœΠ΅Ρ‚ΠΎΠ΄ Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ() Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ пСрвая получСнная ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… запись Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ с индСксом 0.

Π’Π°ΠΆΠ½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ порядковый Π½ΠΎΠΌΠ΅Ρ€ строки Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запроса (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π•Π‘Π’Π¬NULL(ПОROWNUM(), 0) Π² самом запросС, Ссли Π‘Π£Π‘Π” это ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚) ΠΈ индСкс Π² массивС 1Π‘. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° сдвиг: Π½ΠΎΠΌΠ΅Ρ€ строки Π² SQL часто начинаСтся с 1, Π° индСкс Π² 1Π‘ β€” с 0. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° основС порядковых Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ², Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΡ€ΠΎ этот сдвиг.

ΠŸΡ€ΠΈ использовании Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² запросах 1Π‘, Ссли Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ послС выполнСния, дСйствуСт ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ. Никаких скрытых смСщСний ΠΈΠ»ΠΈ Β«Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…Β» ΠΏΠ΅Ρ€Π²Ρ‹Ρ… строк Π² стандартных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘ Π½Π΅ прСдусмотрСно. ΠŸΡƒΡΡ‚Π°Ρ пСрвая строка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ спСцифичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, Π½ΠΎ Π½Π΅ Π² структурах Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π΅ΠΊΡ€Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ

ΠŸΡ€ΡΠΌΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту массива ΠΏΠΎ индСксу (Массив[5]) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ поиск элСмСнта ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ часто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°ΠΉΡ‚Π΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π² массив ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ индСксы, Π° Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Ρ‹ ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ запроса.

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

Бамая коварная ошибка ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с индСксами β€” это ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° обращСния ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту Π² пустой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Если массив создан, Π½ΠΎ Π½Π΅ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½, Π΅Π³ΠΎ количСство Ρ€Π°Π²Π½ΠΎ 0. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту с индСксом 0 Π² пустом массивС Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ВсСгда провСряйтС свойство ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ > 0 ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ.

Другая распространСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ использовании ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… индСксов. Π’ 1Π‘, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Python, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ индСксация (ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° массива) Π½Π΅ поддСрТиваСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ синтаксиса языка. Π—Π°ΠΏΠΈΡΡŒ Массив[-1] ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС. Для получСния послСднСго элСмСнта Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ индСкс: Массив[Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1].

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

πŸ’‘

Π—ΠΎΠ»ΠΎΡ‚ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями Π² 1Π‘: ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт всСгда 0, послСдний всСгда ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ-1. Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ТСстко Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ числа (магичСскиС числа) Π² качСствС Π³Ρ€Π°Π½ΠΈΡ† Ρ†ΠΈΠΊΠ»ΠΎΠ², всСгда ΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ индСксу, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅ΠΌΡƒ количСство элСмСнтов?

БистСма выдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ «ИндСкс Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Β». Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ, ΠΈ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ рСгистрации (Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ) появится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ запись. Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ прСдприятия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ стандартноС ΠΎΠΊΠ½ΠΎ ошибки с тСхничСскими дСталями.

МоТно Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс массива Π² настройках 1Π‘?

НСт, это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ свойство ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ языка 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ индСкс Π½Π° 1 ΠΈΠ»ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ число Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°ΡˆΠΈΡ‚ΠΎ Π² компилятор ΠΈ срСду выполнСния.

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта Π² Ρ†ΠΈΠΊΠ»Π΅ «Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎΒ»?

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

НачинаСтся Π»ΠΈ индСксация с нуля Π² рСгистрах свСдСний?

РСгистры свСдСний сами ΠΏΠΎ сСбС Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ «индСксов» Π² смыслС массивов. Π­Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€Ρ‹ записСй. Однако ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ срСза рСгистра Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ массив ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ строки Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Ρ‹ начиная с 0.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… старых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠΎΠ΄Π° Ρ†ΠΈΠΊΠ» начинаСтся с 1?

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ошибкой Π°Π²Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, пСрСносом Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈΠ· VB/VBA, Π»ΠΈΠ±ΠΎ спСцификой Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ OLE/COM, Π³Π΄Π΅ нумСрация ΠΌΠΎΠ³Π»Π° ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Π’ соврСмСнном чистом ΠΊΠΎΠ΄Π΅ 1Π‘ Ρ†ΠΈΠΊΠ» ΠΏΠΎ индСксам ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с 0.