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

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

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

1. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: функция Найти()

Π‘Π°ΠΌΡ‹ΠΉ простой способ Π½Π°ΠΉΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массивС β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Найти(). Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния искомого элСмСнта ΠΈΠ»ΠΈ -1, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ. Бинтаксис:

ИндСкс = Массив.Найти(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅[, ΠΠ°Ρ‡Π°Π»ΠΎΠŸΠΎΠΈΡΠΊΠ°]);

Π“Π΄Π΅:

  • πŸ”Ή Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” искомый элСмСнт (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ массивом).
  • πŸ”Ή ΠΠ°Ρ‡Π°Π»ΠΎΠŸΠΎΠΈΡΠΊΠ° (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) β€” индСкс, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ поиск (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0).

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

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

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

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

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

ИндСкс = МассивЧисла.Найти(20); // Π’Π΅Ρ€Π½Π΅Ρ‚ 1

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция Найти() выполняСт поэлСмСнтноС сравнСниС. Если массив содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ссылки Π½Π° справочники), поиск Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ ссылкС, Π° Π½Π΅ ΠΏΠΎ содСрТимому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ элСмСнт ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ свойства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ Лямбда-выраТСния.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • 🚫 НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для поиска ΠΏΠΎ частичному совпадСнию (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, подстроки Π² строкС).
  • 🚫 Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ β€” для всСх Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π½ΡƒΠΆΠ΅Π½ Ρ†ΠΈΠΊΠ».
  • 🚫 МСдлСннСС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (Π±ΠΎΠ»Π΅Π΅ 1000 элСмСнтов).
πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска Π² массивах 1Π‘ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Найти()
Π¦ΠΈΠΊΠ» Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ
ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°/БоотвСтствиС)
Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск
Бвоя функция

2. Поиск с использованиСм Ρ†ΠΈΠΊΠ»ΠΎΠ²: Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈ Пока

Когда Найти() Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ всС вхоТдСния ΠΈΠ»ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ слоТныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят Ρ†ΠΈΠΊΠ»Ρ‹. Рассмотрим Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈ Пока.

Π¦ΠΈΠΊΠ» Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх элСмСнтов:

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

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

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

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

ΠΠ°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅Π˜Π½Π΄Π΅ΠΊΡΡ‹ = Новый Массив;

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

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = "Π―Π±Π»ΠΎΠΊΠΎ" Π’ΠΎΠ³Π΄Π°

ΠΠ°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅Π˜Π½Π΄Π΅ΠΊΡΡ‹.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ.ИндСкс(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚));

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

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

Π¦ΠΈΠΊΠ» Пока ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ поиск послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ совпадСния:

i = 0;

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

Пока i < ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() И НЕ НайдСн Π¦ΠΈΠΊΠ»

Если ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ[i] = "Π‘Π°Π½Π°Π½" Π’ΠΎΠ³Π΄Π°

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

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСн Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ: " + i);

Π˜Π½Π°Ρ‡Π΅

i = i + 1;

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

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

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Ρ†ΠΈΠΊΠ»ΠΎΠ²:

  • πŸ”§ Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ: ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ сравнСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск ΠΏΠΎ части строки ΠΈΠ»ΠΈ ΠΏΠΎ нСскольким полям структуры).
  • πŸ”§ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слоТных условий: Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Бвойство = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ И Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Π”Π°Ρ‚Π° > ВСкущаяДата() Π’ΠΎΠ³Π΄Π°....
  • πŸ”§ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ совпадСния.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими массивами (10 000+ элСмСнтов) Ρ†ΠΈΠΊΠ»Ρ‹ Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π² 2–3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ спСциализированныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск). Для ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°Π΄Π°Ρ‡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‚ΠΈΠΏ сравниваСмых Π΄Π°Π½Π½Ρ‹Ρ… (число/строка/ссылка)

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅ рСгистр ΠΏΡ€ΠΈ сравнСнии строк

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ совпадСнии

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Массив.ИндСкс() для получСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ элСмСнта-->

3. Поиск Π² массивах структур ΠΈ соотвСтствий

ΠžΡΠΎΠ±ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСдставляСт поиск Π² массивах, Π³Π΄Π΅ элСмСнты β€” это структуры ΠΈΠ»ΠΈ соотвСтствия. Бтандартная функция Найти() здСсь Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сравниваСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ ссылкС, Π° Π½Π΅ ΠΏΠΎ содСрТимому.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π½Π°ΠΉΠ΄Π΅ΠΌ структуру с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ поля Код:

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

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

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

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

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

// Поиск структуры с Код = 200

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

Если Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.Код = 200 Π’ΠΎΠ³Π΄Π°

НайдСннаяБтруктура = Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°;

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

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

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

Для соотвСтствий Π»ΠΎΠ³ΠΈΠΊΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π°, Π½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠ»ΠΈ значСния:

БоотвСтствиС = Новый БоотвСтствиС;

БоотвСтствиС.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("key1", "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1");

БоотвСтствиС.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("key2", "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2");

// Поиск ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ

Если БоотвСтствиС.Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡("key1") Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НайдСно: " + БоотвСтствиС["key1"]);

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

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со структурами:

  • 🐞 Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ структур Ρ‡Π΅Ρ€Π΅Π· = (ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ссылки, Π° Π½Π΅ содСрТимоС).
  • 🐞 Π—Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сущСствованиС ΠΊΠ»ΡŽΡ‡Π° Π² соотвСтствии (Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡()).
  • 🐞 НС ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ поля структуры ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ НСопрСдСлСно.
Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск Π² массивС структур?

Для частых поисков ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ полю (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Код) ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ создайтС БоотвСтствиС, Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” индСкс Π² массивС:

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

Для i = 0 По ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1 Π¦ΠΈΠΊΠ»

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

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ поиск Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π·Π° O(1) вмСсто O(n).

4. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ поиск: Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

Если массив отсортирован, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ (O(log n) ΠΏΡ€ΠΎΡ‚ΠΈΠ² O(n)). Π’ 1Π‘ Π½Π΅Ρ‚ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для этого, Π½ΠΎ Π΅Π΅ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

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

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

ΠŸΡ€Π°Π²Π°ΡΠ“Ρ€Π°Π½ΠΈΡ†Π° = Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() - 1;

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

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π‘Ρ€Π΅Π΄Π½ΠΈΠΉΠ˜Π½Π΄Π΅ΠΊΡ;

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

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

Π˜Π½Π°Ρ‡Π΅

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

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

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

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ -1; // НС Π½Π°ΠΉΠ΄Π΅Π½ΠΎ

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

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

ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Новый Массив;

ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(10);

ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(20);

ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(30);

ИндСкс = Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉΠŸΠΎΠΈΡΠΊ(ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ², 20); // Π’Π΅Ρ€Π½Π΅Ρ‚ 1

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска:

Π₯арактСристика Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n) O(log n)
ВрСбования ΠΊ массиву Π›ΡŽΠ±ΠΎΠΉ ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° 10 000 элСмСнтов ~10 000 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ~14 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ
РСализация Π² 1Π‘ ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для динамичСски измСняСмых массивов, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ вставки/удалСния трСбуСтся повторная сортировка. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях рассмотритС использованиС Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² поиска ΠΈΠ»ΠΈ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† (Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· БоотвСтствиС Π² 1Π‘).
πŸ’‘

Если массив часто измСняСтся, Π½ΠΎ трСбуСтся быстрый поиск, Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² Π΄Π²ΡƒΡ… Π²ΠΈΠ΄Π°Ρ…: ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ (для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ) ΠΈ отсортированный (для поиска). ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° обновляйтС ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ копию.

5. Поиск с использованиСм ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ (Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, БоотвСтствиС, БписокЗначСний)

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² 1Π‘ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ способы поиска, часто Π±ΠΎΠ»Π΅Π΅ эффСктивныС, Ρ‡Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π° с массивами. Рассмотрим Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

1. БоотвСтствиС β€” идСально для поиска ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ:

Π‘ΠΎΠΎΡ‚Π² = Новый БоотвСтствиС;

Π‘ΠΎΠΎΡ‚Π².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("ΠΊΠ»ΡŽΡ‡1", "Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1");

Π‘ΠΎΠΎΡ‚Π².Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("ΠΊΠ»ΡŽΡ‡2", "Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2");

Если Π‘ΠΎΠΎΡ‚Π².Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΠšΠ»ΡŽΡ‡("ΠΊΠ»ΡŽΡ‡1") Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: " + Π‘ΠΎΠΎΡ‚Π²["ΠΊΠ»ΡŽΡ‡1"]);

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

2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° β€” ΡƒΠ΄ΠΎΠ±Π½Π° для хранСния ΠΏΠ°Ρ€ Β«ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β» с быстрым доступом:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π”Π°Π½Π½Ρ‹Ρ… = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°;

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π”Π°Π½Π½Ρ‹Ρ….Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("ID_100", "Π’ΠΎΠ²Π°Ρ€ А");

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π”Π°Π½Π½Ρ‹Ρ….Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ("ID_200", "Π’ΠΎΠ²Π°Ρ€ Π‘");

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π”Π°Π½Π½Ρ‹Ρ….Бвойство("ID_100"); // "Π’ΠΎΠ²Π°Ρ€ А"

3. БписокЗначСний β€” прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΡŽ() ΠΈ ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡŽ():

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

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

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(200, "ДвСсти");

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Бписок.ΠΠ°ΠΉΡ‚ΠΈΠŸΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΡŽ(200); // НайдСт элСмСнт со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 200

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ вмСсто массивов:

  • πŸ“Œ НуТна ассоциативная связь (ΠΊΠ»ΡŽΡ‡ β†’ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅).
  • πŸ“Œ ВрСбуСтся быстрый поиск Π±Π΅Π· сортировки.
  • πŸ“Œ Π”Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, Π½ΠΎ часто Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ.
πŸ’‘

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ БоотвСтствиС ΠΈ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ поиск Π·Π° O(1), Ρ‡Ρ‚ΠΎ Π² сотни Ρ€Π°Π· быстрСС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска Π² массивах Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

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

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ 1Π‘ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ошибками ΠΏΡ€ΠΈ поискС Π² массивах. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ самыС распространСнныС:

1. Поиск ΠΏΠΎ ссылкС вмСсто значСния

Если массив содСрТит ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, элСмСнты справочников), функция Найти() сравниваСт ссылки, Π° Π½Π΅ содСрТимоС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². РСшСниС β€” ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ свойства:

// ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:

ИндСкс = ΠœΠ°ΡΡΠΈΠ²Π‘ΡΡ‹Π»ΠΎΠΊ.Найти(ΠžΠ±ΡŠΠ΅ΠΊΡ‚); // Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ ссылки

// ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:

Для КаТдого Бсылка Из ΠœΠ°ΡΡΠΈΠ²Π‘ΡΡ‹Π»ΠΎΠΊ Π¦ΠΈΠΊΠ»

Если Бсылка.НаимСнованиС = ΠžΠ±ΡŠΠ΅ΠΊΡ‚.НаимСнованиС Π’ΠΎΠ³Π΄Π°

// Нашли!

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

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

2. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ²

ΠŸΡ€ΠΈ поискС строк стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ БтрНачинаСтсяБ(), Π‘Ρ‚Ρ€Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚() ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ строки ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

ИскомоС = "  Ρ‚ΠžΠ²ΠΡ€  ";

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

Если Π‘Ρ‚Ρ€Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚(БтрНиТнийРСг(Π‘ΠΎΠΊΡ€Π›ΠŸ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚)), БтрНиТнийРСг(Π‘ΠΎΠΊΡ€Π›ΠŸ(ИскомоС))) Π’ΠΎΠ³Π΄Π°

// Нашли!

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

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

3. Поиск Π² Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ массивС

Если массив пуст ΠΈΠ»ΠΈ Π½Π΅ создан, Π²Ρ‹Π·ΠΎΠ² Найти() ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС. ВсСгда провСряйтС:

Если Массив = НСопрСдСлСно Или Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() = 0 Π’ΠΎΠ³Π΄Π°

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

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

4. Π—Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎ НСопрСдСлСно

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ НСопрСдСлСно, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ сравнСния. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ явно:

Если Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ <> НСопрСдСлСно И Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Π˜ΡΠΊΠΎΠΌΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π’ΠΎΠ³Π΄Π°

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

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

7. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Ρ‡Ρ‚ΠΎ быстрСС Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅?

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° поиска Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ сравнСниС Π½Π° массивС ΠΈΠ· 10 000 элСмСнтов (тСсты Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.20):

ΠœΠ΅Ρ‚ΠΎΠ΄ ВрСмя выполнСния (мс) Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
Найти() ~15 МалСнькиС массивы (<100 элСмСнтов), простой поиск
Π¦ΠΈΠΊΠ» Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ~30 БлоТная Π»ΠΎΠ³ΠΈΠΊΠ° сравнСния, поиск всСх Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ
Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск ~0.1 ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ массивы, ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ
БоотвСтствиС ~0.05 Частый поиск ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, ассоциативныС Π΄Π°Π½Π½Ρ‹Π΅

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • ⚑ Для массивов <100 элСмСнтов ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Найти().
  • ⚑ Для 100–1000 элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ с Ρ€Π°Π½Π½ΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ.
  • ⚑ Для >1000 элСмСнтов:
    • Если массив статичный β€” Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск.
    • Если Π΄Π°Π½Π½Ρ‹Π΅ часто ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ β€” БоотвСтствиС.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: На ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ влияСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска, Π½ΠΎ ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, поиск ΠΏΠΎ числовым индСксам Π² БоотвСтствии Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ ΠΏΠΎ строковым ΠΊΠ»ΡŽΡ‡Π°ΠΌ. Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ числовыС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹.

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

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

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ с Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²:

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

Для КаТдого Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Из Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² Π¦ΠΈΠΊΠ»

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

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

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

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

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Найти() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ -1, хотя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅ΡΡ‚ΡŒ Π² массивС?

ВСроятныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

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

РСшСниС: ΠΎΡ‚Π»Π°Π΄ΡŒΡ‚Π΅ ΠΊΠΎΠ΄, выводя Ρ‚ΠΈΠΏΡ‹ элСмСнтов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π’ΠΈΠΏΠ—Π½Ρ‡().

Как Π½Π°ΠΉΡ‚ΠΈ элСмСнт Π² массивС структур ΠΏΠΎ нСскольким полям?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ всСх условий:

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

Если Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ПолС1 = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 И Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°.ПолС2 = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2 Π’ΠΎΠ³Π΄Π°

// Нашли!

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

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

Для ускорСния создайтС Π·Π°Ρ€Π°Π½Π΅Π΅ БоотвСтствиС с составным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "ПолС1_ПолС2").

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния для поиска Π² массивС строк?

Π”Π°, Π½ΠΎ Π½Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π‘Ρ‚Ρ€Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚() ΠΈΠ»ΠΈ Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

Π Π΅Π³Π’Ρ‹Ρ€ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("^А.*");

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

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

Если Π Π΅Π³Π’Ρ‹Ρ€.ВСст(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

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

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

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ рСгулярныС выраТСния Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ поиск Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах.

Как ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ поиском?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ():

Массив.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(НаправлСниСБортировки.Π’ΠΎΠ·Ρ€); // По Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ

// Или с сравнитСлСм:

Массив.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠŸΠΎΠŸΠΎΠ»ΡŽ); // Π“Π΄Π΅ Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠŸΠΎΠŸΠΎΠ»ΡŽ β€” ваша функция

Для структур Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ кастомный ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒ:

Ѐункция Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠŸΠΎΠšΠΎΠ΄Ρƒ(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚1, Π­Π»Π΅ΠΌΠ΅Π½Ρ‚2)

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚1.Код - Π­Π»Π΅ΠΌΠ΅Π½Ρ‚2.Код;

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

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒΠŸΠΎΠšΠΎΠ΄Ρƒ);