Π’ ΠΌΠΈΡ€Π΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ массивы β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… инструмСнтов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π‘Π΅Π· Π½ΠΈΡ… слоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ эффСктивноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² систСмС, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° справочников, Ρ€Π°Π±ΠΎΡ‚Π° с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ интСграция с внСшними источниками. Однако для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² понятиС"массив" часто остаСтся Ρ‚ΡƒΠΌΠ°Π½Π½Ρ‹ΠΌ: ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚ Π²ΠΈΠ΄Ρ‹, ΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” Π³Π΄Π΅ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅?

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ просто даст ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρƒ, Π° раскроСт всС Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами Π² 1Π‘ 8.3 ΠΈ 1Π‘ 8.2. ΠœΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ синтаксис, рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, сравним ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ массивы Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ коллСкциями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈΠ»ΠΈ БоотвСтствиС). Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с ошибками ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами ΠΈΠ»ΠΈ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ β€” здСсь Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с динамичСскими массивами, Π° Ρ‚Π°ΠΊΠΆΠ΅ раскроСм сСкрСты, ΠΊΠ°ΠΊ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с большими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π“ΠΎΡ‚ΠΎΠ²Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Ρ€Π°Π· ΠΈ навсСгда?

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ массив Π² 1Π‘: Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Массив Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” это упорядочСнная коллСкция элСмСнтов, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ осущСствляСтся ΠΏΠΎ индСксу (порядковому Π½ΠΎΠΌΠ΅Ρ€Ρƒ). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования, Π³Π΄Π΅ массивы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ статичСскими (фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°), Π² 1Π‘ ΠΎΠ½ΠΈ всСгда динамичСскиС: ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ характСристики массивов Π² 1Π‘:

  • πŸ“Œ Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ с нуля: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” 1, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнтам.
  • πŸ”„ ДинамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°: ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты"Π½Π° Π»Π΅Ρ‚Ρƒ" с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ.
  • πŸ” Випизация элСмСнтов: массив ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ любого Ρ‚ΠΈΠΏΠ° (числа, строки, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 1Π‘, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ массивы), Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ однотипности для прСдсказуСмости ΠΊΠΎΠ΄Π°.
  • πŸ”— Бсылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: ΠΏΡ€ΠΈ присвоСнии массива Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ создаСтся Π½Π΅ копия, Π° ссылка Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎ влияСт Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ….

Π“Π΄Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ массивы? ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π²Π΅Π·Π΄Π΅:

  • πŸ“Š ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… частСй Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, расчСт сумм ΠΏΠΎ строкам).
  • πŸ”„ ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ функциями ΠΈΠ»ΠΈ модулями.
  • πŸ“‚ Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ с внСшними систСмами (JSON, XML).
  • πŸ” Поиск ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ элСмСнтов ΠΏΠΎ слоТным условиям.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ массива:

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

МассивЧисСл[0] = 10;

МассивЧисСл[1] = 20;

МассивЧисСл[2] = 30;

πŸ“Š Как часто Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ массивы Π² 1Π‘?
ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ скриптС
Иногда, для спСцифичСских Π·Π°Π΄Π°Ρ‡
Рядом, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ
Никогда, Π½Π΅ понимаю ΠΈΡ… назначСния

2. Π’ΠΈΠ΄Ρ‹ массивов Π² 1Π‘: ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ особСнности

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

2.1. ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π­Ρ‚ΠΎ классичСский"список" элСмСнтов, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ свой индСкс. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² 90% Π·Π°Π΄Π°Ρ‡:

Π˜ΠΌΠ΅Π½Π°ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ = Новый Массив;

Π˜ΠΌΠ΅Π½Π°ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Иванов");

Π˜ΠΌΠ΅Π½Π°ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²");

Π˜ΠΌΠ΅Π½Π°ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²");

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ:

  • πŸ“Œ Π›Π΅Π³ΠΊΠΎΡΡ‚ΡŒ создания ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • πŸ” Быстрый доступ ΠΊ элСмСнтам ΠΏΠΎ индСксу (О(1) ΠΏΠΎ скорости).
  • πŸ”„ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Найти, Π’Π“Ρ€Π°Π½ΠΈΡ†Π°, ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ.

2.2. ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π­Ρ‚ΠΎ массивы, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сами ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивами. НапримСр, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с строками ΠΈ столбцами:

Π’Π°Π±Π»ΠΈΡ†Π°Π”Π°Π½Π½Ρ‹Ρ… = Новый Массив;

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ"строку"

Π‘Ρ‚Ρ€ΠΎΠΊΠ°1 = Новый Массив;

Π‘Ρ‚Ρ€ΠΎΠΊΠ°1.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π―Π±Π»ΠΎΠΊΠΈ");

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

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΡƒΡŽ"строку"

Π‘Ρ‚Ρ€ΠΎΠΊΠ°2 = Новый Массив;

Π‘Ρ‚Ρ€ΠΎΠΊΠ°2.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π“Ρ€ΡƒΡˆΠΈ");

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

// ДобавляСм строки Π² основной массив

Π’Π°Π±Π»ΠΈΡ†Π°Π”Π°Π½Π½Ρ‹Ρ….Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°1);

Π’Π°Π±Π»ΠΈΡ†Π°Π”Π°Π½Π½Ρ‹Ρ….Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°2);

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы?

  • πŸ“Š Для прСдставлСния Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, экспорт Π² Excel).
  • πŸ”„ ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с иСрархичСскими структурами (Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ).
  • πŸ“‚ Для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· запросов с Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ.
πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ часто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ элСмСнтам ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, рассмотритС использованиС Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ БоотвСтствия β€” ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ для ассоциативного доступа ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.

Π’ΠΈΠΏ массива ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠŸΠ»ΡŽΡΡ‹ ΠœΠΈΠ½ΡƒΡΡ‹
ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Бписок Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² Π·Π°ΠΊΠ°Π·Π΅ ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π°, высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Π°Ρ структура
Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π’Π°Π±Π»ΠΈΡ†Π° Ρ†Π΅Π½ ΠΏΠΎ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Π΅ ΠΈ складам Π£Π΄ΠΎΠ±Π½ΠΎ для Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ
ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ (3+ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ) ΠšΡƒΠ± аналитичСских Π΄Π°Π½Π½Ρ‹Ρ… Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ для слоТных структур Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, низкая Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°

3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ инициализация массивов: синтаксис ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π΅ΡΡ‚ΡŒ нСсколько способов ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив. Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ стиля программирования. Рассмотрим основныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.

3.1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ пустого массива

Π‘Π°ΠΌΡ‹ΠΉ простой способ β€” инициализация Π±Π΅Π· элСмСнтов:

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

Π’Π°ΠΊΠΎΠΉ массив ΠΈΠΌΠ΅Π΅Ρ‚ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ = 0 ΠΈ Π³ΠΎΡ‚ΠΎΠ² ΠΊ добавлСнию элСмСнтов.

3.2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива с фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ

Если Π·Π°Ρ€Π°Π½Π΅Π΅ извСстСн Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ создании:

МассивНа10Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² = Новый Массив(10); // Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ массив с 10 элСмСнтами (индСксы 0-9)
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ создании массива с фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ всС элСмСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ НСопрСдСлСно. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам, Ссли Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅Π΄ использованиСм.

3.3. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

МоТно сразу Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив значСниями:

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ = Новый Массив Из {"ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ","Π—Π΅Π»Π΅Π½Ρ‹ΠΉ","Π‘ΠΈΠ½ΠΈΠΉ"};

Или Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ:

МассивЧисСл = Новый Массив;

МассивЧисСл.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(1);

МассивЧисСл.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(2);

МассивЧисСл.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(3);

3.4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ массива (ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» = Новый Массив Из {1, 2, 3};

Копия = ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π».Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ; // Π’Π΅ΠΏΠ΅Ρ€ΡŒ это нСзависимый массив

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с массивом

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

4. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами Π² 1Π‘

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² 1Π‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для манипуляции Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ самыС ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.

4.1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов

  • πŸ”Ή Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) β€” добавляСт элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† массива.
  • πŸ”Ή Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(ИндСкс, Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) β€” вставляСт элСмСнт ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу.
  • πŸ”Ή Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(ИндСкс) β€” удаляСт элСмСнт ΠΏΠΎ индСксу.
  • πŸ”Ή ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ β€” удаляСт всС элСмСнты.

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

Массив = Новый Массив Из {"А","Π‘","Π’"};

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π“"); // {"А","Π‘","Π’","Π“"}

Массив.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(1,"АА"); // {"А","АА","Π‘","Π’","Π“"}

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(2); // {"А","АА","Π’","Π“"}

4.2. Поиск ΠΈ сортировка

  • πŸ”Ή Найти(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния ΠΈΠ»ΠΈ -1.
  • πŸ”Ή ИндСкс(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) β€” синоним ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Найти.
  • πŸ”Ή Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(НаправлСниС) β€” сортируСт элСмСнты (НаправлСниСБортировки.Π’ΠΎΠ·Ρ€ ΠΈΠ»ΠΈ НаправлСниСБортировки.Π£Π±Ρ‹Π²).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сортировки:

Числа = Новый Массив Из {5, 2, 8, 1};

Числа.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(НаправлСниСБортировки.Π’ΠΎΠ·Ρ€); // {1, 2, 5, 8}

4.3. АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для быстрых вычислСний Π½Π°Π΄ массивами ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

  • πŸ”Ή Мин / Макс β€” минимальноС ΠΈ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
  • πŸ”Ή Π‘ΡƒΠΌΠΌΠ° β€” сумма всСх числовых элСмСнтов.
  • πŸ”Ή Π‘Ρ€Π΅Π΄Π½Π΅Π΅ β€” срСднСС арифмСтичСскоС.

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

Π¦Π΅Π½Ρ‹ = Новый Массив Из {100, 200, 150};

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π‘ΡƒΠΌΠΌΠ°:" + Π¦Π΅Π½Ρ‹.Π‘ΡƒΠΌΠΌΠ°); // Π’Ρ‹Π²Π΅Π΄Π΅Ρ‚ 450

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Найти Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ элСмСнт?

ΠœΠ΅Ρ‚ΠΎΠ΄ Найти Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ -1, Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. ВсСгда провСряйтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм индСкса, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ"ИндСкс Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† массива". ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного поиска:

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

Если ИндСкс <> -1 Π’ΠΎΠ³Π΄Π°

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½

Π˜Π½Π°Ρ‡Π΅

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

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

5. Π Π°Π±ΠΎΡ‚Π° с массивами Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…: практичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ВСория Π±Π΅Π· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ бСсполСзна. Рассмотрим нСсколько Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… сцСнариСв, Π³Π΄Π΅ массивы Π² 1Π‘ Ρ€Π΅ΡˆΠ°ΡŽΡ‚Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ бизнСса.

5.1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΉ части Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

Допустим, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сумму строк Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅"РСализацияВоваровУслуг" с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ скидки:

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ

Π’Π°Π±Π»ΠΈΡ‡Π½Π°ΡΠ§Π°ΡΡ‚ΡŒ = Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π’ΠΎΠ²Π°Ρ€Ρ‹;

// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ массив для хранСния сумм со скидкой

Π‘ΡƒΠΌΠΌΡ‹Π‘ΠΎΠ‘ΠΊΠΈΠ΄ΠΊΠΎΠΉ = Новый Массив;

// ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ строкам

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π’Π°Π±Π»ΠΈΡ‡Π½Π°ΡΠ§Π°ΡΡ‚ΡŒ Π¦ΠΈΠΊΠ»

Π‘ΡƒΠΌΠΌΠ°Π‘ΠΎΠ‘ΠΊΠΈΠ΄ΠΊΠΎΠΉ = Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Π‘ΡƒΠΌΠΌΠ° * (1 - Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Π‘ΠΊΠΈΠ΄ΠΊΠ°/100);

Π‘ΡƒΠΌΠΌΡ‹Π‘ΠΎΠ‘ΠΊΠΈΠ΄ΠΊΠΎΠΉ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘ΡƒΠΌΠΌΠ°Π‘ΠΎΠ‘ΠΊΠΈΠ΄ΠΊΠΎΠΉ);

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

5.2. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° с Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ². НапримСр, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ΄Π°ΠΆ ΠΏΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌ:

Π“Ρ€ΡƒΠΏΠΏΡ‹ΠŸΡ€ΠΎΠ΄Π°ΠΆ = Новый Массив;

Запрос = Новый Запрос;

Запрос.ВСкст =

"ВЫБРАВЬ

| ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ.ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ КАК ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€,

| БУММА(ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ.Π‘ΡƒΠΌΠΌΠ°) КАК Π‘ΡƒΠΌΠΌΠ°

|Π˜Π—

| Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ КАК ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ

|Π“Π Π£ΠŸΠŸΠ˜Π ΠžΠ’ΠšΠ ПО

| ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ.ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ;

Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ;

Пока Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π¦ΠΈΠΊΠ»

Π“Ρ€ΡƒΠΏΠΏΠ° = Новый Массив;

Π“Ρ€ΡƒΠΏΠΏΠ°.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€);

Π“Ρ€ΡƒΠΏΠΏΠ°.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°.Π‘ΡƒΠΌΠΌΠ°);

Π“Ρ€ΡƒΠΏΠΏΡ‹ΠŸΡ€ΠΎΠ΄Π°ΠΆ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π“Ρ€ΡƒΠΏΠΏΠ°);

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

5.3. ОбмСн Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с внСшними систСмами (JSON)

ΠŸΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с API часто приходится ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² массивы ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON:

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ JSON-строку ΠΈΠ· внСшнСй систСмы

JSONΠ‘Ρ‚Ρ€ΠΎΠΊΠ° ='{"Ρ‚ΠΎΠ²Π°Ρ€Ρ‹": ["Π’ΠΎΠ²Π°Ρ€1","Π’ΠΎΠ²Π°Ρ€2","Π’ΠΎΠ²Π°Ρ€3"]}';

// Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ Π² массив

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ² = JSON.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ(JSONΠ‘Ρ‚Ρ€ΠΎΠΊΠ°).Ρ‚ΠΎΠ²Π°Ρ€Ρ‹;

// ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π’ΠΎΠ²Π°Ρ€);

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

πŸ’‘

ΠœΠ°ΡΡΠΈΠ²Ρ‹ β€” ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ с внСшними систСмами. Они Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² JSON/XML ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ускоряСт ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ.

6. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами: ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами (тысячи элСмСнтов) Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. НСоптимизированный ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Рассмотрим ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹.

6.1. БыстродСйствиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с массивами зависит ΠΎΡ‚ ΠΈΡ… Ρ‚ΠΈΠΏΠ°:

  • πŸ”Ή Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ† (Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ) β€” O(1) (быстро).
  • πŸ”Ή Вставка/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π² сСрСдину β€” O(n) (ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов).
  • πŸ”Ή Доступ ΠΏΠΎ индСксу β€” O(1) (ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ).
  • πŸ”Ή Поиск элСмСнта (Найти) β€” O(n) (Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск).

Для массивов Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов рассмотритС использованиС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ"БписокЗначСний" β€” ΠΎΠ½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ быстрый поиск.

6.2. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΈ сборка мусора

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² 1Π‘ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ сборщиком мусора, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π½ΡŽΠ°Π½ΡΡ‹:

  • πŸ”Ή Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ массивы (ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ > 100 000) ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ очисткС памяти.
  • πŸ”Ή Если массив большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ присвойтС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ НСопрСдСлСно.
  • πŸ”Ή Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ создания массивов Π² Ρ†ΠΈΠΊΠ»Π°Ρ… β€” Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

// ΠŸΠ»ΠΎΡ…ΠΎ: создаСм массив Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΠΈΡ‚ΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π°

Для i = 1 По 1000 Π¦ΠΈΠΊΠ»

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив;

//.. ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ..

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

// Π₯ΠΎΡ€ΠΎΡˆΠΎ: создаСм ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив;

Для i = 1 По 1000 Π¦ΠΈΠΊΠ»

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ;

//.. ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ..

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

6.3. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ массивам

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ:

Π—Π°Π΄Π°Ρ‡Π° РСкомСндуСмая коллСкция ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ
Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€"ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈΠ»ΠΈ БоотвСтствиС Быстрый доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ
Π Π°Π±ΠΎΡ‚Π° с большими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… БписокЗначСний ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для 1Π‘, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° отобраТСния
Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ (Π² Π½ΠΎΠ²Ρ‹Ρ… вСрсиях 1Π‘) АвтоматичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π΄ΡƒΠ±Π»ΠΈ
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ вСрсиях 1Π‘ Π½ΠΈΠΆΠ΅ 8.3.10 Π½Π΅Ρ‚ встроСнной ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ"ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ". Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ массив + ΠΌΠ΅Ρ‚ΠΎΠ΄ Найти ΠΈΠ»ΠΈ БоотвСтствиС.

7. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ самыС распространСнныС ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ ΠΈ способы ΠΈΡ… ΠΎΠ±Ρ…ΠΎΠ΄Π°.

7.1. Ошибка"ИндСкс Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† массива"

Бамая частая ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ индСксу:

Массив = Новый Массив Из {10, 20};

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Массив[2]); // ΠžΠ¨Π˜Π‘ΠšΠ! Π˜Π½Π΄Π΅ΠΊΡΡ‹ 0 ΠΈ 1

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ:

  • πŸ”Ή ВсСгда провСряйтС ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ доступом.
  • πŸ”Ή Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°..Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок.

7.2. НСявноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ массива ΠΏΠΎ ссылкС

ΠŸΡ€ΠΈ присвоСнии массива Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ создаСтся ссылка, Π° Π½Π΅ копия:

Массив1 = Новый Массив Из {1, 2, 3};

Массив2 = Массив1; // Π­Ρ‚ΠΎ ссылка!

Массив2[0] = 100;

// Π’Π΅ΠΏΠ΅Ρ€ΡŒ Массив1[0] Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π²Π΅Π½ 100!

РСшСниС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для создания нСзависимой ΠΊΠΎΠΏΠΈΠΈ.

7.3. Π—Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты

ΠŸΡ€ΠΈ создании массива фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° всС элСмСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ НСопрСдСлСно:

Массив = Новый Массив(5); // ВсС элСмСнты = НСопрСдСлСно

Π‘ΡƒΠΌΠΌΠ° = Массив[0] + 10; // ΠžΠ¨Π˜Π‘ΠšΠ! НСопрСдСлСно + число

ВсСгда ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ элСмСнты ΠΏΠ΅Ρ€Π΅Π΄ использованиСм:

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

Массив[i] = 0; // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ нулями

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

7.4. НСкоррСктная сортировка

ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (числа, строки). Для сортировки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€:

// Ошибка: ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π΅Π· ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π°

БписокВоваров.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ; // НС сработаСт!

// ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ: ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сравнСния

БписокВоваров.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠ’ΠΎΠ²Π°Ρ€Ρ‹ΠŸΠΎΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ);

Ѐункция Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠ’ΠΎΠ²Π°Ρ€Ρ‹ΠŸΠΎΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ(Π’ΠΎΠ²Π°Ρ€1, Π’ΠΎΠ²Π°Ρ€2)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π‘Ρ‚Ρ€Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ(Π’ΠΎΠ²Π°Ρ€1.НаимСнованиС, Π’ΠΎΠ²Π°Ρ€2.НаимСнованиС);

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

ΠŸΠΎΡ‡Π΅ΠΌΡƒ сортировка массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сравниваСт элСмСнты ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ значСния. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ свойству ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅.

8. ΠœΠ°ΡΡΠΈΠ²Ρ‹ vs Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ 1Π‘: Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ?

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΏΠΎΠΌΠΈΠΌΠΎ массивов Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ: БписокЗначСний, Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, БоотвСтствиС, Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Когда стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массивы, Π° ΠΊΠΎΠ³Π΄Π° β€” Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹?

8.1. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ массива ΠΈ БпискаЗначСний

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Массив БписокЗначСний
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа ΠΏΠΎ индСксу ⚑ ΠžΡ‡Π΅Π½ΡŒ быстрая (O(1)) ⚑ Быстрая
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° отобраТСния Π² Ρ„ΠΎΡ€ΠΌΠ΅ ❌ НСт βœ… Π”Π°
ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ (Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Π£Π΄Π°Π»ΠΈΡ‚ΡŒ, Найти) Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ (ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ, Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠŸΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠŸΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΡŽ)
ΠŸΠ°ΠΌΡΡ‚ΡŒ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… 🟑 БрСдняя βœ… ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°

Π’Ρ‹Π²ΠΎΠ΄: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Массив для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… вычислСний ΠΈ быстрого доступа, Π° БписокЗначСний β€” Ссли Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² интСрфСйсС.

8.2. Когда Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ ΠΈΠ»ΠΈ БоотвСтствиС?

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ассоциативный доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ (Π° Π½Π΅ ΠΏΠΎ индСксу), Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  • πŸ”Ή Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° β€” для хранСния Π½Π°Π±ΠΎΡ€Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… свойств ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • πŸ”Ή БоотвСтствиС β€” для создания словаря"ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, кэш Π΄Π°Π½Π½Ρ‹Ρ…).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с БоотвСтствиСм:

КэшЦСн = Новый БоотвСтствиС;

КэшЦСн.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("Π’ΠΎΠ²Π°Ρ€1", 100);

КэшЦСн.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("Π’ΠΎΠ²Π°Ρ€2", 200);

// Быстрый доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ

Π¦Π΅Π½Π° = КэшЦСн.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ("Π’ΠΎΠ²Π°Ρ€1");

8.3. Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для слоТных Π΄Π°Π½Π½Ρ‹Ρ…

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° полноцСнная Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ сортировкой, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

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

Π’Π°Π±Π»ΠΈΡ†Π°.Колонки.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("НаимСнованиС");

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

// ДобавляСм строку

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π’Π°Π±Π»ΠΈΡ†Π°.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ;

Π‘Ρ‚Ρ€ΠΎΠΊΠ°.НаимСнованиС ="Π’ΠΎΠ²Π°Ρ€1";

Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Π¦Π΅Π½Π° = 100;

- НуТна ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ простота? β†’ Массив

- НуТно ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ΅? β†’ БписокЗначСний

- НуТСн доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ? β†’ БоотвСтствиС

- НуТна Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ? β†’ Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ-->

FAQ: ЧастыС вопросы ΠΎ массивах Π² 1Π‘

πŸ”Ή Как ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π΄Π»ΠΈΠ½Ρƒ) массива?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ:

Массив = Новый Массив Из {1, 2, 3};

Π Π°Π·ΠΌΠ΅Ρ€ = Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ; // Π’Π΅Ρ€Π½Π΅Ρ‚ 3

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π’Π“Ρ€Π°Π½ΠΈΡ†Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс (Π½Π° 1 мСньшС, Ρ‡Π΅ΠΌ количСство):

ПослСднийИндСкс = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°; // Π’Π΅Ρ€Π½Π΅Ρ‚ 2
πŸ”Ή МоТно Π»ΠΈ Π² массивС Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…?

Π”Π°, Π² ΠΎΠ΄Π½ΠΎΠΌ массивС ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ элСмСнты Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²:

Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив;

Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(100); // Число

Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘Ρ‚Ρ€ΠΎΠΊΠ°"); // Π‘Ρ‚Ρ€ΠΎΠΊΠ°

Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π˜ΡΡ‚ΠΈΠ½Π°); // Π‘ΡƒΠ»Π΅Π²ΠΎ

Однако это услоТняСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам. РСкомСндуСтся ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ однотипности элСмСнтов.

πŸ”Ή Как ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° массива?

Π•ΡΡ‚ΡŒ нСсколько способов:

  1. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° Для КаТдого:
  2. Массив1 = Новый Массив Из {1, 2};
    

    Массив2 = Новый Массив Из {3, 4};

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

    Массив1.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

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

  3. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта.
  4. Π’ Π½ΠΎΠ²Ρ‹Ρ… вСрсиях 1Π‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ + (начиная с 8.3.14):
  5. ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Массив1 + Массив2;
πŸ”Ή Как ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ свойству?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ:

ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠŸΠΎΠ”Π°Ρ‚Π΅);

Ѐункция Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠŸΠΎΠ”Π°Ρ‚Π΅(ΠžΠ±ΡŠΠ΅ΠΊΡ‚1, ΠžΠ±ΡŠΠ΅ΠΊΡ‚2)

Если ΠžΠ±ΡŠΠ΅ΠΊΡ‚1.Π”Π°Ρ‚Π° > ΠžΠ±ΡŠΠ΅ΠΊΡ‚2.Π”Π°Ρ‚Π° Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ 1;

И