Π Π°Π±ΠΎΡ‚Π° с массивами Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых частых Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. НСрСдко трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, содСрТится Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС Π΄Π°Π½Π½Ρ‹Ρ…, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ список Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π·Π°Π΄Π°Ρ‡Π° каТСтся простой, Π½ΠΎ Π² 1Π‘ сущСствуСт нСсколько способов Π΅Ρ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β€” ΠΎΡ‚ стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ 7 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ вхоТдСния значСния Π² массив, ΠΈΡ… особСнности, ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Найти(), Π° ΠΊΠΎΠ³Π΄Π° β€” Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Π°ΡŽΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ нюансам Ρ€Π°Π±ΠΎΡ‚Ρ‹ с пустыми значСниями, ссылками Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ динамичСскими массивами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто становятся источником Π±Π°Π³ΠΎΠ².

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΊΠ°ΠΊ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ 1Π‘, Ρ‚Π°ΠΊ ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ программистам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ для Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вСрсий ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 8.3.x ΠΈ протСстированы Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… конфигурациях.

1. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Найти(): простой ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ способ

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” Массив.Найти(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс элСмСнта, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΈΠ»ΠΈ -1, Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚. Π­Ρ‚ΠΎΡ‚ способ ΠΈΠ΄Π΅Π°Π»Π΅Π½ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов ΠΈ простых ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ² = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Молоко");

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π₯Π»Π΅Π±");

ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π―ΠΉΡ†Π°");

ИндСкс = ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Найти("Π₯Π»Π΅Π±");

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π₯Π»Π΅Π± Π½Π°ΠΉΠ΄Π΅Π½ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ " + ИндСкс);

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π₯Π»Π΅Π± отсутствуСт Π² массивС");

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • πŸ”Ή ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° β€” идСально для быстрых ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ
  • πŸ”Ή Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (строки, числа, ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹)
  • πŸ”Ή НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ:

  • ⚠️ Низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (Π±ΠΎΠ»Π΅Π΅ 1000 элСмСнтов)
  • ⚠️ НС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ NULL ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ значСния Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ
πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ всС вхоТдСния значСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с Найти() Π² Ρ‚Π΅Π»Π΅, начиная поиск с индСкса ИндСкс + 1 послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ нахоТдСния.

2. ИспользованиС Ρ†ΠΈΠΊΠ»Π° Для КаТдого: Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ

Когда трСбуСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ элСмСнта, Π½ΠΎ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ статистику), ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ явный ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов Ρ‡Π΅Ρ€Π΅Π· Для КаТдого.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ:

ΠœΠ°ΡΡΠΈΠ²Π—Π°ΠΊΠ°Π·ΠΎΠ² = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²Π—Π°ΠΊΠ°Π·ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(БсылкаНаЗаказ1);

ΠœΠ°ΡΡΠΈΠ²Π—Π°ΠΊΠ°Π·ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(БсылкаНаЗаказ2);

НайдСн = Π›ΠΎΠΆΡŒ;

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

Если Π—Π°ΠΊΠ°Π·.Π”Π°Ρ‚Π° >= НачалоДня(ВСкущаяДата()) Π’ΠΎΠ³Π΄Π°

НайдСн = Π˜ΡΡ‚ΠΈΠ½Π°;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ; // Досрочный Π²Ρ‹Ρ…ΠΎΠ΄, Ссли достаточно ΠΎΠ΄Π½ΠΎΠ³ΠΎ совпадСния

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

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

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  • πŸ”Ή НуТно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива
  • πŸ”Ή ВрСбуСтся слоТная Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ нСскольким полям)
  • πŸ”Ή Массив содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
Найти()
Π¦ΠΈΠΊΠ» Для КаТдого
ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π’Π Π΅Π³, НРСг)
ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, БоотвСтствиС)
Π”Ρ€ΡƒΠ³ΠΎΠ΅

Π’Π°ΠΆΠ½ΠΎ: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами (10 000+ элСмСнтов) Ρ†ΠΈΠΊΠ» Для КаТдого ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² 2-3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ спСциализированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Найти() ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· Π’Π Π΅Π³/НРСг: ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ рСгистр

Если массив содСрТит строки ΠΈ трСбуСтся поиск Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра, стандартный Найти() Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ β€” ΠΎΠ½ чувствитСлСн ΠΊ рСгистру. Π’ этом случаС ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ комбинация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π’Π Π΅Π³() (Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр) ΠΈΠ»ΠΈ НРСг() (Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр).

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

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

ΠœΠ°ΡΡΠΈΠ²ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("ООО Ромашка");

ΠœΠ°ΡΡΠΈΠ²ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("ИП Иванов");

ΠŸΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = "ΠΎΠΎΠΎ Ρ€ΠΎΠΌΠ°ΡˆΠΊΠ°";

НайдСн = Π›ΠΎΠΆΡŒ;

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

Если Π’Π Π΅Π³(ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ) = Π’Π Π΅Π³(ΠŸΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) Π’ΠΎΠ³Π΄Π°

НайдСн = Π˜ΡΡ‚ΠΈΠ½Π°;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

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

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

ΠΡŽΠ°Π½ΡΡ‹:

  • πŸ”Ή Π’Π Π΅Π³() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ НРСг(), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ прСобразования Π² Unicode для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ
  • πŸ”Ή Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ
Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ссли Π² массивС ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…?

Если массив содСрТит ΠΈ строки, ΠΈ числа, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ провСряйтС Ρ‚ΠΈΠΏ значСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π’ΠΈΠΏΠ—Π½Ρ‡(), ΠΈΠ½Π°Ρ‡Π΅ Π’Π Π΅Π³() Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π° нСстроковых элСмСнтах.

4. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ БоотвСтствиС: оптимизация для частых ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ

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

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

// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ = Новый БоотвСтствиС;

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("Иванов", Π˜ΡΡ‚ΠΈΠ½Π°);

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²", Π˜ΡΡ‚ΠΈΠ½Π°);

// Быстрая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

Если ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡("Иванов") Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠšΠ»ΠΈΠ΅Π½Ρ‚ Иванов Π½Π°ΠΉΠ΄Π΅Π½");

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

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ:

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° БоотвСтствиС
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ O(1) O(1)
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² НСт НСт (ΠΊΠ»ΡŽΡ‡ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹)
ΠŸΠ°ΠΌΡΡ‚ΡŒ Π­ΠΊΠΎΠ½ΠΎΠΌΠ½Π΅Π΅ Расход большС Π½Π° 10-15%
ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Бвойство() БоотвСтствиС.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡()

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ подходят для динамичСски измСняСмых Π΄Π°Π½Π½Ρ‹Ρ… β€” Ссли массив часто модифицируСтся, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ массив для хранСния.

5. Π Π°Π±ΠΎΡ‚Π° с массивами ссылок Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 1Π‘

ΠžΡΠΎΠ±ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСдставляСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° вхоТдСния, ΠΊΠΎΠ³Π΄Π° массив содСрТит ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (справочники, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹). Π—Π΄Π΅ΡΡŒ стандартный Найти() ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ·-Π·Π° особСнностСй сравнСния ссылок Π² 1Π‘.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ:

ΠœΠ°ΡΡΠΈΠ²Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.Π—Π°ΠΊΠ°Π·ΠŸΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Ρ.ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠΠΎΠΌΠ΅Ρ€Ρƒ("0001"));

Π˜ΡΠΊΠΎΠΌΠ°ΡΠ‘ΡΡ‹Π»ΠΊΠ° = Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹.Π—Π°ΠΊΠ°Π·ΠŸΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Ρ.ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠΠΎΠΌΠ΅Ρ€Ρƒ("0001");

НайдСн = Π›ΠΎΠΆΡŒ;

Для КаТдого Π”ΠΎΠΊ Из ΠœΠ°ΡΡΠΈΠ²Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π¦ΠΈΠΊΠ»

Если Π”ΠΎΠΊ.Бсылка = Π˜ΡΠΊΠΎΠΌΠ°ΡΠ‘ΡΡ‹Π»ΠΊΠ°.Бсылка Π’ΠΎΠ³Π΄Π°

НайдСн = Π˜ΡΡ‚ΠΈΠ½Π°;

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

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

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

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки:

  • ❌ Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉΠ˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€() β€” Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ сравнСниС ссылок
  • ❌ ИспользованиС Найти() Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ "ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
  • ❌ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° Π΄Π°Ρ‚Ρ‹ β€” ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ коллизиям

Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ свойство .Бсылка|Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π’ΠΈΠΏΠ—Π½Ρ‡() для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ²|Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π·Π°Ρ€Π°Π½Π΅Π΅ индСксируйтС ссылки Π² БоотвСтствиС|ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠŸΡƒΡΡ‚Π°ΡΠ‘ΡΡ‹Π»ΠΊΠ° Π½Π΅ Ρ€Π°Π²Π½Π° NULL-->

6. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов: Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск ΠΈ Ρ…ΡΡˆΠΈ

Если массив содСрТит Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов ΠΈ трСбуСтся максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ:

  1. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск β€” Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сортировки массива, Π½ΠΎ Π΄Π°Ρ‘Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ O(log n).
  2. Π₯эш-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ β€” рСализация Ρ‡Π΅Ρ€Π΅Π· БоотвСтствиС с Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сортированный массив):

// Массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ отсортирован!

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

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

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

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

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

Ѐункция Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉΠŸΠΎΠΈΡΠΊ(Массив, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

ЛСваяГраница = 0;

ΠŸΡ€Π°Π²Π°ΡΠ“Ρ€Π°Π½ΠΈΡ†Π° = Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°();

Mientras ЛСваяГраница <= ΠŸΡ€Π°Π²Π°ΡΠ“Ρ€Π°Π½ΠΈΡ†Π° Π¦ΠΈΠΊΠ»

Π‘Π΅Ρ€Π΅Π΄ΠΈΠ½Π° = Π¦Π΅Π»(ЛСваяГраница + (ΠŸΡ€Π°Π²Π°ΡΠ“Ρ€Π°Π½ΠΈΡ†Π° - ЛСваяГраница) / 2);

Если Массив[Π‘Π΅Ρ€Π΅Π΄ΠΈΠ½Π°] = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π‘Π΅Ρ€Π΅Π΄ΠΈΠ½Π°;

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ Массив[Π‘Π΅Ρ€Π΅Π΄ΠΈΠ½Π°] < Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

ЛСваяГраница = Π‘Π΅Ρ€Π΅Π΄ΠΈΠ½Π° + 1;

Π˜Π½Π°Ρ‡Π΅

ΠŸΡ€Π°Π²Π°ΡΠ“Ρ€Π°Π½ΠΈΡ†Π° = Π‘Π΅Ρ€Π΅Π΄ΠΈΠ½Π° - 1;

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

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

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ 1Π‘ (справочниками, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ… сравнСниС Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ < ΠΈ >. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

7. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹: LINQ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ массивов

Π’ соврСмСнных вСрсиях 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20+ появились Π½ΠΎΠ²Ρ‹Π΅ возмоТности для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ LINQ ΠΈΠ· .NET:

  • πŸ”Ή ΠœΠ΅Ρ‚ΠΎΠ΄ Массив.Π“Π΄Π΅() β€” Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ элСмСнтов ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ
  • πŸ”Ή ΠœΠ΅Ρ‚ΠΎΠ΄ Массив.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚() β€” прямой Π°Π½Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ вхоТдСния
  • πŸ”Ή ΠœΠ΅Ρ‚ΠΎΠ΄ Массив.ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ() β€” поиск ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ совпадСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚():

Если ΠœΠ°ΡΡΠΈΠ²Π’ΠΎΠ²Π°Ρ€ΠΎΠ².Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚("Π―Π±Π»ΠΎΠΊΠΈ") Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π―Π±Π»ΠΎΠΊΠΈ Π΅ΡΡ‚ΡŒ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ");

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

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ограничСния:

  • ⚠️ Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Найти() для простых ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ
  • ⚠️ НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² старых вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (Π΄ΠΎ 8.3.20)
πŸ’‘

Для максимальной совмСстимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Найти(), Ρ†ΠΈΠΊΠ»Ρ‹). НовыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(), Π“Π΄Π΅()) ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

FAQ: ЧастыС вопросы ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивах 1Π‘

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ NULL Π² массив?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ():

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

Если НЕ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСн пустой элСмСнт");

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

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: NULL ΠΈ НСопрСдСлённоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ Π² 1Π‘!

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Найти() Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ Π² массивС?

ЧастыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  1. Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈ Число)
  2. Π’ массивС хранятся ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π½Π΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ссылки
  3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива β€” это динамичСскиС списки ΠΈΠ»ΠΈ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ сравнСниС

РСшСниС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ (ΠžΡ‚Π»Π°Π΄ΠΊΠ°.Π’ΠΎΡ‡ΠΊΠ°ΠžΡΡ‚Π°Π½ΠΎΠ²Π°()), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² массивС.

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π² массивС ΠΈΠ· 100 000 элСмСнтов?

ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹:

  1. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ массив Π² БоотвСтствиС ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ с Π½ΠΈΠΌ
  2. Если Π΄Π°Π½Π½Ρ‹Π΅ статичныС β€” отсортируйтС массив ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск
  3. Π Π°Π·Π±Π΅ΠΉΡ‚Π΅ массив Π½Π° мСньшиС части (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±ΡƒΠΊΠ²Π°ΠΌ для строк)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΈ:

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ΠŸΠΎΠ‘ΡƒΠΊΠ²Π°ΠΌ = Новый БоотвСтствиС;

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

ΠŸΠ΅Ρ€Π²Π°ΡΠ‘ΡƒΠΊΠ²Π° = Π›Π΅Π²(Π’ΠΎΠ²Π°Ρ€, 1);

Если НЕ Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ΠŸΠΎΠ‘ΡƒΠΊΠ²Π°ΠΌ.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡(ΠŸΠ΅Ρ€Π²Π°ΡΠ‘ΡƒΠΊΠ²Π°) Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ΠŸΠΎΠ‘ΡƒΠΊΠ²Π°ΠΌ.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(ΠŸΠ΅Ρ€Π²Π°ΡΠ‘ΡƒΠΊΠ²Π°, Новый Массив);

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

Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ΠŸΠΎΠ‘ΡƒΠΊΠ²Π°ΠΌ[ΠŸΠ΅Ρ€Π²Π°ΡΠ‘ΡƒΠΊΠ²Π°].Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π’ΠΎΠ²Π°Ρ€);

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

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IN ΠΊΠ°ΠΊ Π² SQL для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ вхоТдСния?

Π’ 1Π‘ Π½Π΅Ρ‚ прямого Π°Π½Π°Π»ΠΎΠ³Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° IN, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:

  1. Для простых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: Если Массив.Найти(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) <> -1 Π’ΠΎΠ³Π΄Π°
  2. Для запросов: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ВЫБРАВЬ ... ΠŸΠžΠœΠ•Π‘Π’Π˜Π’Π¬

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для запроса:

ВЫБРАВЬ Π Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅Π’ΠΎΠ²Π°Ρ€Ρ‹.Бсылка

ΠŸΠžΠœΠ•Π‘Π’Π˜Π’Π¬ Π²Ρ‚Π Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅

Π˜Π— Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.Π’ΠΎΠ²Π°Ρ€Ρ‹ КАК Π Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅Π’ΠΎΠ²Π°Ρ€Ρ‹

Π“Π”Π• Π Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅Π’ΠΎΠ²Π°Ρ€Ρ‹.ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ = Π›ΠΎΠΆΡŒ;

Если Π²Ρ‚Π Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Π΅.Найти(Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ’ΠΎΠ²Π°Ρ€) <> НСопрСдСлён Π’ΠΎΠ³Π΄Π°

// Π’ΠΎΠ²Π°Ρ€ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½

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

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² массив массивов (ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив)?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ:

Ѐункция ΠΠ°ΠΉΡ‚ΠΈΠ’ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌΠœΠ°ΡΡΠΈΠ²Π΅(Массив, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

Для КаТдого Подмассив Из Массив Π¦ΠΈΠΊΠ»

Если Подмассив.Найти(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) <> -1 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π˜ΡΡ‚ΠΈΠ½Π°;

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π›ΠΎΠΆΡŒ;

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

Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (3+ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности) Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.