Π Π°Π±ΠΎΡ‚Π° с массивами структур Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых распространённых Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ. Часто трСбуСтся Π½Π΅ просто ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнты, Π° быстро Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ запись ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ поиску ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ замСдлСнию Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы, особСнно ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

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

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ скрытым нюансам Ρ€Π°Π±ΠΎΡ‚Ρ‹ с структурами Π² массивах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто становятся ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ошибок: сравнСниС ΠΏΠΎ ссылкС vs. ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с НСопрСдСлён ΠΈ NULL, Π° Ρ‚Π°ΠΊΠΆΠ΅ влияниС Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ поиска.

1. Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск: простой, Π½ΠΎ Π½Π΅ всСгда эффСктивный

НаиболСС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ способ β€” ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ всСх элСмСнтов массива с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ условия. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов (Π΄ΠΎ 1000 элСмСнтов) ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π³Π΄Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π°.

Основной нСдостаток: ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива врСмя поиска растёт Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ элСмСнт Π² массивС ΠΈΠ· 10 000 структур, Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ΅ врСмя.

  • βœ… ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” достаточно ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Для КаТдого
  • βœ… НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
  • ❌ Низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠ°Ρ…
  • ❌ НС ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ для частых ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для поиска структуры ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ поля Код:

Ѐункция ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠšΠΎΠ΄ΡƒΠ›ΠΈΠ½Π΅ΠΉΠ½ΠΎ(ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€, Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄) Экспорт

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

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Код = Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄ Π’ΠΎΠ³Π΄Π°

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

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

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

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ сравнСнии структур ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ = провСряСт равСнство всСх ΠΏΠΎΠ»Π΅ΠΉ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ. Для частичного сравнСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°: Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Код = Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄.

2. Поиск с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Найти()

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам элСмСнт, Π½ΠΎ ΠΈ Π΅Π³ΠΎ индСкс Π² массивС, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, удалСния ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Ρ‹).

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ значСния
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π˜ΡΠΊΠΎΠΌΡ‹ΠΉ элСмСнт (для структур ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС поля) Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Код, НаимСнованиС", 123, "Π’ΠΎΠ²Π°Ρ€1")
ΠΠ°Ρ‡Π°Π»ΠΎΠŸΠΎΠΈΡΠΊΠ° ИндСкс, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ поиск (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0) 10
ΠΠ°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠŸΠΎΠΈΡΠΊΠ° НаправлСниС (ΠΠ°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠŸΠΎΠΈΡΠΊΠ°.Π’ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ»ΠΈ Назад) ΠΠ°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠŸΠΎΠΈΡΠΊΠ°.Π’ΠΏΠ΅Ρ€Π΅Π΄

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ° = ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Найти(

Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Код", 123),

0,

ΠΠ°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠŸΠΎΠΈΡΠΊΠ°.Π’ΠΏΠ΅Ρ€Π΅Π΄

);

Если Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ°.НайдСн Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСн элСмСнт с индСксом: " + Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ°.ИндСкс);

Π˜Π½Π°Ρ‡Π΅

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

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

πŸ’‘

Для ускорСния поиска ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ полю структуры создайтС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив с значСниями этого поля ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Найти() для Π½Π΅Π³ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ массиву ΠΏΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΌΡƒ индСксу.

3. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск: ускорСниС для отсортированных Π΄Π°Π½Π½Ρ‹Ρ…

Если ваш массив структур отсортирован ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ полю, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС β€” Π·Π° логарифмичСскоС врСмя O(log n) вмСсто Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ O(n).

Π’Π°ΠΆΠ½ΠΎΠ΅ условиС: массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ отсортирован ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ полю, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ сработаСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

  • βœ… Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ поиска Π² сотни Ρ€Π°Π· Π²Ρ‹ΡˆΠ΅ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах
  • βœ… ΠžΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ для частых ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌ
  • ❌ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сортировки
  • ❌ Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Π΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск

РСализация Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска для массива структур, отсортированного ΠΏΠΎ полю Код:

Ѐункция Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉΠŸΠΎΠΈΡΠΊΠŸΠΎΠšΠΎΠ΄Ρƒ(Массив, Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄) Экспорт

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

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

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

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

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠšΠΎΠ΄ = Массив[Π‘Ρ€Π΅Π΄Π½ΠΈΠΉΠ˜Π½Π΄Π΅ΠΊΡ].Код;

Если Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠšΠΎΠ΄ = Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄ Π’ΠΎΠ³Π΄Π°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Массив[Π‘Ρ€Π΅Π΄Π½ΠΈΠΉΠ˜Π½Π΄Π΅ΠΊΡ];

Π˜Π½Π°Ρ‡Π΅Π•ΡΠ»ΠΈ Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠšΠΎΠ΄ < Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄ Π’ΠΎΠ³Π΄Π°

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

Π˜Π½Π°Ρ‡Π΅

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

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

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

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² массивС (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов) Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈΠ½Π°Ρ‡Π΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск
ΠœΠ΅Ρ‚ΠΎΠ΄ Найти()
Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск
Поиск Ρ‡Π΅Ρ€Π΅Π· Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
Π”Ρ€ΡƒΠ³ΠΎΠΉ

4. ИспользованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† для слоТных запросов

Когда Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ нСскольким полям ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ слоТныС условия (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ Π΄Π°Ρ‚), ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ особСнно эффСктивСн ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими ΠΎΠ±ΡŠΡ‘ΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (10 000+ записСй).

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

  • πŸ” Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ язык запросов 1Π‘ с конструкциями Π“Π”Π•, Π£ΠŸΠžΠ Π―Π”ΠžΠ§Π˜Π’Π¬ ПО, Π“Π Π£ΠŸΠŸΠ˜Π ΠžΠ’ΠšΠ
  • ⚑ Высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ благодаря ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ
  • πŸ›  Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ β€” ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ условия поиска Π±Π΅Π· пСрСписывания ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ поиска ΠΏΠΎ Π΄Π²ΡƒΠΌ полям:

// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

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

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

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

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

// ЗаполняСм Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· массива структур

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

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

НоваяБтрока.Код = Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Код;

НоваяБтрока.НаимСнованиС = Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.НаимСнованиС;

НоваяБтрока.Π”Π°Ρ‚Π° = Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Π”Π°Ρ‚Π°;

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

// ВыполняСм запрос

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

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

"ВЫБРАВЬ *

|Π˜Π— &Π’Π°Π±Π»ΠΈΡ†Π°

|Π“Π”Π• Код = &Код

| И Π”Π°Ρ‚Π° ΠœΠ•Π–Π”Π£ &ДатаНачало И &Π”Π°Ρ‚Π°ΠšΠΎΠ½Π΅Ρ†";

Запрос.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€("Π’Π°Π±Π»ΠΈΡ†Π°", Π’Π°Π±Π»ΠΈΡ†Π°Π”Π°Π½Π½Ρ‹Ρ…);

Запрос.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€("Код", 123);

Запрос.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€("ДатаНачало", НачалоДня(ВСкущаяДата()));

Запрос.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€("Π”Π°Ρ‚Π°ΠšΠΎΠ½Π΅Ρ†", ΠšΠΎΠ½Π΅Ρ†Π”Π½Ρ(ВСкущаяДата()));

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

Когда стоит ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†?

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

5. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ индСксов для ускорСния поиска

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

Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ индСксов Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для статичСских ΠΈΠ»ΠΈ Ρ€Π΅Π΄ΠΊΠΎ измСняСмых массивов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ индСкса ΠΏΠΎ полю Код:

// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ индСкс (Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°: ΠšΠ»ΡŽΡ‡ -> ИндСкс)

Π˜Π½Π΄Π΅ΠΊΡΠŸΠΎΠšΠΎΠ΄Ρƒ = Новый БоотвСтствиС;

// ЗаполняСм индСкс

Для i = 0 По ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°() Π¦ΠΈΠΊΠ»

Код = ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€[i].Код;

Если НЕ Π˜Π½Π΄Π΅ΠΊΡΠŸΠΎΠšΠΎΠ΄Ρƒ.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡(Код) Π’ΠΎΠ³Π΄Π°

Π˜Π½Π΄Π΅ΠΊΡΠŸΠΎΠšΠΎΠ΄Ρƒ.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(Код, i);

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

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

// Быстрый поиск ΠΏΠΎ индСксу

Ѐункция ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠ˜Π½Π΄Π΅ΠΊΡΡƒ(ИндСкс, Массив, Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄)

Если ИндСкс.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡(Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄) Π’ΠΎΠ³Π΄Π°

Π˜Π½Π΄Π΅ΠΊΡΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚Π° = ИндСкс[Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄];

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Массив[Π˜Π½Π΄Π΅ΠΊΡΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°];

Π˜Π½Π°Ρ‡Π΅

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

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

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

Для динамичСских массивов (Π³Π΄Π΅ элСмСнты часто Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ/ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ) индСкс придётся ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ измСнСния. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π’Π°Π±Π»ΠΈΡ†ΡƒΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с установлСнными индСксами Ρ‡Π΅Ρ€Π΅Π· свойство Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠŸΠΎ.

Поиск выполняСтся ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ|Массив Ρ€Π΅Π΄ΠΊΠΎ измСняСтся|ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ|Π Π°Π·ΠΌΠ΅Ρ€ массива ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 1000 элСмСнтов-->

6. Поиск с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ 1Π‘

Π’ Π½ΠΎΠ²Ρ‹Ρ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20+ появились Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π€ΠΈΠ»ΡŒΡ‚Ρ€(), Π‘Π²Π΅Ρ€Ρ‚ΠΊΠ°() ΠΈ ΠŸΠΎΠΈΡΠΊΠŸΠ΅Ρ€Π²ΠΎΠ³ΠΎ(). Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠŸΠΎΠΈΡΠΊΠŸΠ΅Ρ€Π²ΠΎΠ³ΠΎ():

НайдСнныйЭлСмСнт = ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.ΠŸΠΎΠΈΡΠΊΠŸΠ΅Ρ€Π²ΠΎΠ³ΠΎ(

Ѐункция(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Код = 123; ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

);

Если НайдСнныйЭлСмСнт <> НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСн элСмСнт: " + НайдСнныйЭлСмСнт.НаимСнованиС);

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  • πŸ“œ Код становится Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ
  • πŸ”„ Π›Π΅Π³Ρ‡Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ условия поиска
  • πŸ›‘ МСньшС шансов Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ классичСского Ρ†ΠΈΠΊΠ»Π° Для КаТдого Π½Π° ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (100 000+ элСмСнтов) ΠΈΠ·-Π·Π° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Π²Ρ‹Π·ΠΎΠ² лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

7. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ поиска: практичСскиС совСты

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° поиска зависит ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²: Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, частоты ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ, нСобходимости ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии. Π’ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ:

  1. Для массивов Π΄ΠΎ 1000 элСмСнтов β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Найти(). ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ здСсь Π½Π΅ даст Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ°.
  2. Для массивов 1000–10 000 элСмСнтов β€” рассмотритС Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск (Ссли Π΄Π°Π½Π½Ρ‹Π΅ отсортированы) ΠΈΠ»ΠΈ построСниС индСксов.
  3. Для массивов Π±ΠΎΠ»Π΅Π΅ 10 000 элСмСнтов β€” Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ внСшниС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рСгистры свСдСний).
  4. Для частых поисков ΠΏΠΎ нСскольким полям β€” создайтС Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ….

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ совСты ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • πŸ”„ Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ поиска ΠΏΠΎ нСиндСксируСмым полям (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ полям Ρ‚ΠΈΠΏΠ° Π‘Ρ‚Ρ€ΠΎΠΊΠ° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ тСкстом).
  • πŸ—‘ УдаляйтС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ поля ΠΈΠ· структур ΠΏΠ΅Ρ€Π΅Π΄ поиском β€” это ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΡ‘ΠΌ сравниваСмых Π΄Π°Π½Π½Ρ‹Ρ….
  • πŸ”„ Если массив часто измСняСтся, Π½ΠΎ поиск выполняСтся Ρ€Π΅Π΄ΠΊΠΎ β€” пСрСстраивайтС индСксы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄ поиском.
πŸ’‘

Для критичСских ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ всСгда тСстируйтС ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния.

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

Как ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ нСскольким полям ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ?

Для поиска ΠΏΠΎ нСскольким полям ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  1. Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с запросом, Π³Π΄Π΅ Π² условии Π“Π”Π• ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ поля.
  2. Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ всСх условий Π² Ρ†ΠΈΠΊΠ»Π΅:
    Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Код = Π˜ΡΠΊΠΎΠΌΡ‹ΠΉΠšΠΎΠ΄ И Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Π”Π°Ρ‚Π° >= ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°ΡΠ”Π°Ρ‚Π° Π’ΠΎΠ³Π΄Π°
    

    // НайдСн подходящий элСмСнт

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

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ способ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅.

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

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

  • Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎ всСм полям структуры, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ. НапримСр, Ссли Π² структурС Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ Π”Π°Ρ‚Π°, Π° ΠΏΡ€ΠΈ поискС Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Код, элСмСнты Π½Π΅ совпадут.
  • Поля ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² массивС Число(10,2), Π° ΠΈΡ‰Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Число(15,3)).
  • Π’ структурС Π΅ΡΡ‚ΡŒ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ символы ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² строковых полях.

РСшСниС: всСгда явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ поля для сравнСния ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск Π² массивС ΠΈΠ· 100 000 структур?

Для Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…:

  1. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² рСгистр свСдСний ΠΈΠ»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ запросы.
  2. Если Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти:
    • Π Π°Π·Π±Π΅ΠΉΡ‚Π΅ массив Π½Π° части (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±ΡƒΠΊΠ²Π°ΠΌ наимСнования).
    • ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ индСкс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сначала ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²Π΅, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎ числовому ΠΊΠΎΠ΄Ρƒ).
  • РассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Кэша Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Новый ΠšΡΡˆΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ) для хранСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ:

    Кэш = Новый ΠšΡΡˆΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ(Новый ΠšΠ»ΡŽΡ‡Π˜Π’ΠΈΠΏ("Число"));
    
    

    Ѐункция ΠΠ°ΠΉΡ‚ΠΈΠ‘ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ(Код)

    Если НЕ Кэш.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡(Код) Π’ΠΎΠ³Π΄Π°

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ... // Поиск Π² массивС

    Кэш.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Код, Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚);

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

    Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Кэш.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(Код);

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

    МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для поиска Π² старых вСрсиях 1Π‘?

    Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ ΠŸΠΎΠΈΡΠΊΠŸΠ΅Ρ€Π²ΠΎΠ³ΠΎ() появились Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20. Для Π±ΠΎΠ»Π΅Π΅ старых вСрсий (8.3.10–8.3.19) ΠΌΠΎΠΆΠ½ΠΎ:

    • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСский Ρ†ΠΈΠΊΠ» Для КаТдого.
    • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для условия ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€:
      Ѐункция ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠ£ΡΠ»ΠΎΠ²ΠΈΡŽ(Массив, УсловиС)
      

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

      Если УсловиС(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚) Π’ΠΎΠ³Π΄Π°

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

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

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

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

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

      // ИспользованиС:

      Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠ£ΡΠ»ΠΎΠ²ΠΈΡŽ(

      ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€,

      Ѐункция(Π­Π») Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π».Код = 123; ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

      );

    Как ΠΈΡΠΊΠ°Ρ‚ΡŒ структуру ΠΏΠΎ частичному совпадСнию строкового поля?

    Для поиска ΠΏΠΎ подстрокС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°ΠΉΡ‚ΠΈ всС структуры, Π³Π΄Π΅ НаимСнованиС содСрТит "Π’ΠΎΠ²Π°Ρ€"):

    1. Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск с БтрНайти():
      Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ Π¦ΠΈΠΊΠ»
      

      Если БтрНайти(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.НаимСнованиС, "Π’ΠΎΠ²Π°Ρ€") > 0 Π’ΠΎΠ³Π΄Π°

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

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

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

    2. Запрос ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с ΠŸΠžΠ”ΠžΠ‘ΠΠž:
      Запрос.ВСкст = "ВЫБРАВЬ * Π˜Π— &Π’Π°Π±Π»ΠΈΡ†Π° Π“Π”Π• НаимСнованиС ΠŸΠžΠ”ΠžΠ‘ΠΠž &Π¨Π°Π±Π»ΠΎΠ½";
      

      Запрос.Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€("Π¨Π°Π±Π»ΠΎΠ½", "%Π’ΠΎΠ²Π°Ρ€%");

    Для ускорСния Ρ‚Π°ΠΊΠΈΡ… поисков ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив с Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ строками (ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру ΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ²).