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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ 7 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способов поиска элСмСнтов Π² массивах 1Π‘ β€” ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ с индСксами, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск ΠΈ использованиС встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠ½ΠΎΠ³Π΄Π° простой Ρ†ΠΈΠΊΠ» Для Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ слоТныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ с пояснСниями ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ для копирования.

1. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ поиск Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» Для КаТдого

Π‘Π°ΠΌΡ‹ΠΉ распространённый ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный способ β€” ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ массива с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов (Π΄ΠΎ 1000 элСмСнтов) ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Основной синтаксис:

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

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

// ДСйствия ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚; // ΠΈΠ»ΠΈ ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

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

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

  • βœ… ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²
  • βœ… НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сортировки ΠΈΠ»ΠΈ индСксирования
  • ⚠️ Низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (O(n))
  • ⚠️ НС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ элСмСнта Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ индСкса Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта:

Ѐункция ΠΠ°ΠΉΡ‚ΠΈΠ˜Π½Π΄Π΅ΠΊΡΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°(Массив, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

ИндСкс = 0;

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

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ИндСкс;

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

ИндСкс = ИндСкс + 1;

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ -1; // Если элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π΅ фиксированной Π΄Π»ΠΈΠ½Ρ‹) этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Ссли массив содСрТит НСопрСдСлСно. ВсСгда провСряйтС элСмСнты Π½Π° Π’ΠΈΠΏΠ—Π½Ρ‡(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) <> Π’ΠΈΠΏ("НСопрСдСлСно").
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска Π² массивах 1Π‘ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
Π¦ΠΈΠΊΠ» Для КаТдого
ΠœΠ΅Ρ‚ΠΎΠ΄ Найти()
Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск
БобствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
НС знаю Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

2. ΠœΠ΅Ρ‚ΠΎΠ΄ Найти() для массивов ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 прСдоставляСт встроСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ Найти() для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами ΠΈ коллСкциями. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния искомого значСния ΠΈΠ»ΠΈ -1, Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.

Бинтаксис ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Ρƒ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°:

ИндСкс = Массив.Найти(Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);
  • βœ… Π›Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” ΠΎΠ΄Π½Π° строка вмСсто Ρ†ΠΈΠΊΠ»Π°
  • βœ… Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ массивов (Массив, БписокЗначСний, Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ)
  • ⚠️ ЧувствитСлСн ΠΊ рСгистру ΠΏΡ€ΠΈ сравнСнии строк
  • ⚠️ НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сравнСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования с БпискомЗначСний:

Бписок = Новый БписокЗначСний;

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π―Π±Π»ΠΎΠΊΠΎ");

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘Π°Π½Π°Π½");

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("АпСльсин");

ИндСкс = Бписок.Найти("Π‘Π°Π½Π°Π½"); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 1

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

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

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½");

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠœΠ΅Ρ‚ΠΎΠ΄ Найти() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ строгоС сравнСниС (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ =). Для Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ поиска (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ части строки) придётся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» с БтрНайти() ΠΈΠ»ΠΈ рСгулярными выраТСниями.
πŸ’‘

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

3. Поиск с использованиСм индСксов (Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹)

Для часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… массивов с большим количСством элСмСнтов (10 000+ записСй) цСлСсообразно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСксный массив (Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ элСмСнты Π·Π° константноС врСмя O(1).

Алгоритм Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  1. Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ БоотвСтствиС (Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ), Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡ β€” искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” индСкс Π² основном массивС.
  2. ЗаполняСм соотвСтствиС ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ основного массива.
  3. Π˜Ρ‰Π΅ΠΌ элСмСнт Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ() соотвСтствия.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ… = Новый Массив;

ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ….Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π’ΠΎΠ²Π°Ρ€1");

ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ….Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π’ΠΎΠ²Π°Ρ€2");

ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ….Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π’ΠΎΠ²Π°Ρ€3");

Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый БоотвСтствиС;

Для Инд = 0 По ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ….Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ…[Инд], Инд);

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

// Поиск

Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ = "Π’ΠΎΠ²Π°Ρ€2";

Если Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡(Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ³Π΄Π°

ИндСкс = Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚);

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

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½");

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

ΠœΠ΅Ρ‚ΠΎΠ΄ поиска Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для массивов Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
Π¦ΠΈΠΊΠ» Для КаТдого O(n) Π›ΡŽΠ±Ρ‹Ρ… НСт
ΠœΠ΅Ρ‚ΠΎΠ΄ Найти() O(n) Π›ΡŽΠ±Ρ‹Ρ… НСт
Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹ΠΉ массив O(1) Π‘ΠΎΠ»ΡŒΡˆΠΈΡ… (>1000 элСмСнтов) Π”Π°
Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск O(log n) ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π”Π° (сортировка)
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹Π΅ массивы Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ основного массива. Если Π΄Π°Π½Π½Ρ‹Π΅ динамичСски ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, придётся ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ соотвСтствиС послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ измСнСния ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ события.

4. Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск для отсортированных массивов

Если ваш массив отсортирован, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π° логарифмичСскоС врСмя O(log n). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Π΅Π»ΠΈΡ‚ массив ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускоряСт поиск Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… коллСкциях.

Π’ 1Π‘ Π½Π΅Ρ‚ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска, Π½ΠΎ Π΅Ρ‘ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

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

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

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

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

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π‘Π΅Ρ€Π΅Π΄ΠΈΠ½Π°; // Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½

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

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

Π˜Π½Π°Ρ‡Π΅

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

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ -1; // Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

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

  • βœ… ΠšΡ€Π°ΠΉΠ½Π΅ высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах
  • βœ… ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для массивов с числовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ строками Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС
  • ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сортировки массива
  • ⚠️ НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с нСотсортированными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

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

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

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

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

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

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

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

// Массив ΡƒΠΆΠ΅ отсортирован

ИндСкс = Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉΠŸΠΎΠΈΡΠΊ(МассивЧисСл, 30); // Π’Π΅Ρ€Π½Ρ‘Ρ‚ 2

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск ΠΊ нСотсортированному массиву?

Алгоритм Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ»ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ элСмСнт, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ присутствуСт Π² массивС. Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск опираСтся Π½Π° ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…: Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС ΠΎΠ½ отсСкаСт ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ массива, прСдполагая, Ρ‡Ρ‚ΠΎ лСвая Ρ‡Π°ΡΡ‚ΡŒ мСньшС срСднСго элСмСнта, Π° правая β€” большС. Π’ нСотсортированном массивС это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ.

5. Поиск Π² массивах структур ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ поиска ΠΏΠΎ свойству структуры:

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ = Новый Массив;

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°1 = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("НаимСнованиС, Π¦Π΅Π½Π°", "Π’ΠΎΠ²Π°Ρ€1", 100);

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°2 = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("НаимСнованиС, Π¦Π΅Π½Π°", "Π’ΠΎΠ²Π°Ρ€2", 200);

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

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

ИскомоСНаимСнованиС = "Π’ΠΎΠ²Π°Ρ€2";

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

Если Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.НаимСнованиС = ИскомоСНаимСнованиС Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСн Ρ‚ΠΎΠ²Π°Ρ€: " + Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Π¦Π΅Π½Π°);

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

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

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

Для Π’Π°Π±Π»ΠΈΡ†Ρ‹Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ НайтиБтроки():

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

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

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

НоваяБтрока = Π’Π°Π±Π»ΠΈΡ†Π°.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ();

НоваяБтрока.НаимСнованиС = "Π’ΠΎΠ²Π°Ρ€1";

НоваяБтрока.Π¦Π΅Π½Π° = 100;

НайдСнныСБтроки = Π’Π°Π±Π»ΠΈΡ†Π°.НайтиБтроки(Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("НаимСнованиС", "Π’ΠΎΠ²Π°Ρ€1"));

Если НайдСнныСБтроки.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() > 0 Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСно строк: " + НайдСнныСБтроки.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ());

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

β˜‘οΈ Поиск Π² массивС структур

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

6. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ поиска: ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° поиска зависит ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, частоты поиска ΠΈ нСобходимости ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ динамичСских ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. НиТС β€” Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ:

  • πŸ”Ή ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π΄ΠΎ 100 элСмСнтов: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Для КаТдого ΠΈΠ»ΠΈ Найти() β€” Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ.
  • πŸ”Ή ΠœΠ°ΡΡΠΈΠ²Ρ‹ 100–10 000 элСмСнтов: Если массив статичный β€” отсортируйтС Π΅Π³ΠΎ ΠΈ примСняйтС Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск. Если динамичСский β€” Найти() ΠΈΠ»ΠΈ индСксный массив.
  • πŸ”Ή ΠœΠ°ΡΡΠΈΠ²Ρ‹ >10 000 элСмСнтов: ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ индСксный массив ΠΈΠ»ΠΈ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (БоотвСтствиС).
  • πŸ”Ή Поиск ΠΏΠΎ части строки: Волько Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ с БтрНайти() ΠΈΠ»ΠΈ рСгулярными выраТСниями.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° массивС ΠΈΠ· 100 000 элСмСнтов (тСсты Π½Π° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20):

ΠœΠ΅Ρ‚ΠΎΠ΄ ВрСмя поиска (мс) ΠŸΠ°ΠΌΡΡ‚ΡŒ
Для КаТдого ~1200 Низкая
Найти() ~1100 Низкая
Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹ΠΉ массив ~0.1 Высокая (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ структура)
Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск ~15 Низкая

Для критичСских Π·Π°Π΄Π°Ρ‡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск Π² справочниках с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ записСй) рассмотритС использованиС SQL-запросов ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† вмСсто массивов.

πŸ’‘

На Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (>1000 элСмСнтов) индСксный массив ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Π΄Π°ΡŽΡ‚ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² дСсятки ΠΈ сотни Ρ€Π°Π· ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ поиском.

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

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с поиском Π² массивах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ:

  • 🚫 Поиск Π² Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ массивС: ВсСгда провСряйтС Массив = НСопрСдСлСно ΠΈΠ»ΠΈ Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() = 0.
  • 🚫 Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой: Из-Π·Π° ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚Π΅ΠΉ чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠžΠΊΡ€() ΠΈΠ»ΠΈ сравнСниС с эпсилон (малСньким числом, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 0.0001).
  • 🚫 Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра: Для строковых сравнСний примСняйтС Π‘Ρ‚Ρ€Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ() с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΠ΅Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠšΠ Π΅Π³ΠΈΡΡ‚Ρ€Ρƒ.
  • 🚫 ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ массива Π²ΠΎ врСмя поиска: Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам индСксации. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ элСмСнты, Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного сравнСния чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ:

Ѐункция ЧислаРавны(Число1, Число2, Эпсилон = 0.0001)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Абс(Число1 - Число2) < Эпсилон;

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ поиска Π±Π΅Π· ΡƒΡ‡Ρ‘Ρ‚Π° рСгистра:

Ѐункция НайтиБСзРСгистра(Массив, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

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

Если Π‘Ρ‚Ρ€Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΠ΅Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠšΠ Π΅Π³ΠΈΡΡ‚Ρ€Ρƒ) = 0 Π’ΠΎΠ³Π΄Π°

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

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

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

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ массивы ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ссылкС. Если Π²Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ массив Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска, измСнСния отразятся Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ массивС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, создавайтС копию: КопияМассива = Массив.Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ().

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

Как Π½Π°ΠΉΡ‚ΠΈ всС вхоТдСния элСмСнта Π² массивС, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅?

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

Ѐункция НайтиВсСВхоТдСния(Массив, Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ = Новый Массив;

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

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚);

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹;

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

Для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° индСксов Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π½Π° Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ИндСкс), ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ объявив счётчик ИндСкс.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Найти() для поиска ΠΏΠΎ части строки?

НСт, ΠΌΠ΅Ρ‚ΠΎΠ΄ Найти() ΠΈΡ‰Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ совпадСния. Для поиска ΠΏΠΎ подстрокС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

Ѐункция ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ΅(Массив, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°)

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

Если БтрНайти(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚, ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ°) > 0 Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚;

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ НСопрСдСлСно;

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

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справочников)?

Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² 1Π‘ (справочники, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹) эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  1. ΠžΡ‚Π±ΠΎΡ€Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ.НомСнклатура.ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ()).
  2. Запросы с условиСм Π“Π”Π•.
  3. ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² БоотвСтствиС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:

ΠšΡΡˆΠΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹ = Новый БоотвСтствиС;

Если НЕ ΠšΡΡˆΠΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡("Π’ΠΎΠ²Π°Ρ€123") Π’ΠΎΠ³Π΄Π°

ΠšΡΡˆΠΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("Π’ΠΎΠ²Π°Ρ€123", Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ.НомСнклатура.ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ("Π’ΠΎΠ²Π°Ρ€123"));

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

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ элСмСнт, хотя ΠΎΠ½ Π΅ΡΡ‚ΡŒ Π² массивС?

НаиболСС вСроятныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  1. Массив Π½Π΅ отсортирован (Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ упорядочСнных Π΄Π°Π½Π½Ρ‹Ρ…).
  2. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, число 5 ΠΈ строка "5").
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСстрогоС сравнСниС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π±Π΅Π· округлСния).

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ массив Π½Π° сортировку: Массив.ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() ΠΏΠ΅Ρ€Π΅Π΄ поиском.

Как Π½Π°ΠΉΡ‚ΠΈ элСмСнт Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС?

Для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹:

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

Для Инд1 = 0 По Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Для Инд2 = 0 По Массив[Инд1].Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Если Массив[Инд1][Инд2] = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Колонка", Инд1, Инд2);

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

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ НСопрСдСлСно;

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