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

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

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

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис доступа ΠΏΠΎ индСксу

Π‘Π°ΠΌΡ‹ΠΉ распространСнный способ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ содСрТимому массива β€” использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° индСксации. Π’ языкС 1Π‘ нумСрация элСмСнтов всСгда начинаСтся с нуля, Ρ‡Ρ‚ΠΎ являСтся стандартом для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° соврСмСнных языков программирования. Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту с индСксом, Ρ€Π°Π²Π½Ρ‹ΠΌ количСству элСмСнтов Π² массивС, систСма выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ.

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

Массив = Новый Массив(3);

Массив[0] ="ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ";

Массив[1] = 100;

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Массив[0]; // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ строку"ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ"

Π—Π΄Π΅ΡΡŒ пСрСмСнная Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ строковый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΆΠ΅ Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Массив[5] для этого массива, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° прСрвСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ИндСкс Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ допустимыС индСксы находятся Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 2.

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

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

πŸ’‘

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

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сущСствования элСмСнта ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ

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

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

  • πŸ›‘οΈ ВсСгда сравнивайтС индСкс с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ.
  • πŸ›‘οΈ Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ индСкс Π½Π΅ являСтся ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом.
  • πŸ›‘οΈ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Если.. Π’ΠΎΠ³Π΄Π° для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° чтСния.

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

ИндСкс = 5;

Если ИндСкс >= 0 И ИндСкс < Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π’ΠΎΠ³Π΄Π°

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив[ИндСкс];

Π˜Π½Π°Ρ‡Π΅

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = НСопрСдСлСно;

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

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

πŸ“Š Как Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива?
Явная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Если/Π’ΠΎΠ³Π΄Π°
ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°/Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΠ°ΠΉΡ‚ΠΈΠ˜Π½Π΄Π΅ΠΊΡ
НС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽ, знаю Ρ‚ΠΎΡ‡Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнтов Π² Ρ†ΠΈΠΊΠ»Π΅

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

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

Однако, Ссли Π²Π°ΠΌ критичСски Π²Π°ΠΆΠ΅Π½ порядковый Π½ΠΎΠΌΠ΅Ρ€ элСмСнта (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для формирования ΠΎΡ‚Ρ‡Π΅Ρ‚Π° с Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ строк), придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСский Ρ†ΠΈΠΊΠ» Для с счСтчиком ΠΎΡ‚ 0 Π΄ΠΎ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ - 1. Π’ этом случаС Π²Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ управляСтС индСксом ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ элСмСнт Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π°.

Π’ΠΈΠΏ Ρ†ΠΈΠΊΠ»Π° Доступ ΠΊ индСксу ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Риск ошибки
Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ (Π½ΡƒΠΆΠ΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ счСтчик) Высокая ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ
Для.. По.. Π¦ΠΈΠΊΠ» ΠŸΡ€ΡΠΌΠΎΠΉ доступ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Высокая Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ (ошибка Π³Ρ€Π°Π½ΠΈΡ†)
Пока.. Π¦ΠΈΠΊΠ» Π ΡƒΡ‡Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ счСтчиком БрСдняя Высокий (бСсконСчный Ρ†ΠΈΠΊΠ»)

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

πŸ’‘

Π¦ΠΈΠΊΠ» «Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎΒ» являСтся стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ для чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· массива, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ошибки Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° индСксов.

Π Π°Π±ΠΎΡ‚Π° с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ значСниями Π² массивС

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρƒ значСния НСопрСдСлСно ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС выполнСния Β«ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌΒ». ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π’ΠΈΠΏΠ—Π½Ρ‡ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ = НСопрСдСлСно для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

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

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Массив Π¦ΠΈΠΊΠ»

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

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

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

// Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ бСзопасна

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.НаимСнованиС);

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

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

ВлияниС НСопрСдСлСно Π½Π° сравнСниС

ΠŸΡ€ΠΈ сравнСнии Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит НСопрСдСлСно, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π›ΠΎΠΆΡŒ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случая прямого сравнСния Π½Π° равСнство с самим НСопрСдСлСно.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

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

Для получСния значСния ΠΈΠ· ячСйки с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ [X, Y] Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив-строку ΠΏΠΎ индСксу X, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ элСмСнт ΠΏΠΎ индСксу Y. БинтаксичСски это выглядит ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок. Ошибка Π½Π° любом ΠΈΠ· этапов ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡŽ выполнСния.

  • πŸ“Š ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ индСкс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹.
  • πŸ“Š Π’Ρ‚ΠΎΡ€ΠΎΠΉ индСкс ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ столбца ΠΈΠ»ΠΈ элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹.
  • πŸ“Š Π“Π»ΡƒΠ±ΠΈΠ½Π° влоТСнности тСорСтичСски Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 3 уровня.

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

Π”Π»ΠΈΠ½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… массивов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, «строка» с индСксом 0 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 5 элСмСнтов, Π° «строка» с индСксом 1 β€” всСго 2. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особой Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ².

β˜‘οΈ Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом

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

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями. Бамая распространСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Β«Off-by-one errorΒ» (ошибка Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ), ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» выполняСтся Π΄ΠΎ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π° Π½Π΅ Π΄ΠΎ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ - 1. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ чтСния Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ послСднСго элСмСнта.

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π»ΠΈ порядок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НСкоторыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ сначала массив, ΠΏΠΎΡ‚ΠΎΠΌ индСкс, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с массивами эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ останова (breakpoint) Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ прСдприятия. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ структуры ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ позволяСт ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ количСство элСмСнтов ΠΈ ΠΈΡ… содСрТимоС. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ слуТСбныС сообщСния Π² ΠΆΡƒΡ€Π½Π°Π» рСгистрации с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ индСкса ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

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

πŸ’‘

Для быстрой диагностики содСрТимого массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠžΡ‚Π»Π°Π΄ΠΊΠ°.ВывСстиВЖурнал(Массив), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСкурсивно ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ структуру ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² ΠΎΠΊΠ½Π΅ сообщСний.

МоТно Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт массива ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, ΠΊΠ°ΠΊ Π² Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅?

НСт, стандартный Ρ‚ΠΈΠΏ Массив Π² 1Π‘ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ассоциативныС ΠΊΠ»ΡŽΡ‡ΠΈ (строковыС ΠΈΠΌΠ΅Π½Π°). Доступ осущСствляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ цСлочислСнному индСксу. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈΠ»ΠΈ БоотвСтствиС.

Π§Ρ‚ΠΎ Π²Π΅Ρ€Π½Π΅Ρ‚ массив[10], Ссли Π² массивС всСго 5 элСмСнтов?

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° прСрвСтся с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ИндСкс Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки модуля (Π±Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ) Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚.

Как ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ массив, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ пустыС элСмСнты?

Для очистки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ. ПослС Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° свойство ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ 0. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ массива Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ добавлСния Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Массив ΠΈ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

Массив β€” это простая коллСкция Π»ΡŽΠ±Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π±Π΅Π· ΠΈΠΌΠ΅Π½ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” это структурированная коллСкция с фиксированными ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, оптимизированная для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими объСмами ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ встроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈ сортировки.

МоТно Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива послС создания?

Π”Π°, Ρ‚ΠΈΠΏ Массив являСтся динамичСским. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ автоматичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ»ΠΈ очистку.