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

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

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ встроСнный язык 1Π‘, Ρ‚Π°ΠΊ ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, ΠΈΡ‰ΡƒΡ‰ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° протСстированы Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ 8.3.23).

1. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΎΠ±ΠΌΠ΅Π½ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Π‘Π°ΠΌΡ‹ΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ понятный способ β€” использованиС Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ всСх языках программирования ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ 1Π‘ ΠΎΠ½ выглядит Ρ‚Π°ΠΊ:

ΠŸΠ΅Ρ€Π΅ΠΌ Массив, Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ;

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ массив

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

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт");

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π’Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт");

// МСняСм мСстами 0-ΠΉ ΠΈ 1-ΠΉ элСмСнты

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ = Массив[0];

Массив[0] = Массив[1];

Массив[1] = Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ;

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

  • πŸ”Ή Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² любой вСрсии 1Π‘, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
  • πŸ”Ή НС зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² массивС (ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для чисСл, строк, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²)
  • πŸ”Ή Π›Π΅Π³ΠΊΠΎ читаСтся ΠΈ отлаТиваСтся

Однако Π΅ΡΡ‚ΡŒ ΠΈ минусы. НапримСр, Ссли Π²Ρ‹ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π’Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π°Ρ€Π°Π½Π΅Π΅ (Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ»ΠΈ глобально), ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°". Π’Π°ΠΊΠΆΠ΅ этот способ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вмСсто ΠΎΠ΄Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π² Ρ†ΠΈΠΊΠ»Π°Ρ… с большим количСством ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.

πŸ’‘

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с массивом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справочников), врСмСнная пСрСмСнная Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. Π˜Π½Π°Ρ‡Π΅ 1Π‘ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ присвоСнии. НапримСр: Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠžΠ±ΡŠΠ΅ΠΊΡ‚ = Массив[0] ΠΊΠ°ΠΊ Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠžΠ±ΡŠΠ΅ΠΊΡ‚.Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΈ;

2. ОбмСн Π±Π΅Π· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (арифмСтичСский Ρ‚Ρ€ΡŽΠΊ)

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках программирования для ΠΎΠ±ΠΌΠ΅Π½Π° значСниями ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ 1Π‘ это Ρ‚ΠΎΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для числовых массивов:

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

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

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

// ОбмСн Π±Π΅Π· Π±ΡƒΡ„Π΅Ρ€Π°

МассивЧисСл[0] = МассивЧисСл[0] + МассивЧисСл[1]; // 30

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

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

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, это экономит ΠΏΠ°ΠΌΡΡ‚ΡŒ. Но Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:

  • 🚫 Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с числами (со строками ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС)
  • 🚫 ΠœΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Ссли числа слишком большиС
  • 🚫 Π‘Π»ΠΎΠΆΠ½Π΅Π΅ для понимания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠ΄Π°
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π² массивС хранятся НСопрСдСлСно ΠΈΠ»ΠΈ NULL, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС выполнСния. ВсСгда провСряйтС элСмСнты Π½Π° пустоту ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ.

3. ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ() ΠΈ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ()

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ прСдоставляСт встроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ творчСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ для ΠΎΠ±ΠΌΠ΅Π½Π° элСмСнтов. Алгоритм Ρ‚Π°ΠΊΠΎΠΉ:

  1. БохраняСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.
  2. УдаляСм Сго из массива.
  3. ВставляСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт Π½Π° мСсто ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.
  4. УдаляСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт (Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ).
  5. ВставляСм сохранСнный ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π½Π° мСсто Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ.
Массив = Новый Массив;

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("А");

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π‘");

// БохраняСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ = Массив[0];

// УдаляСм ΠΈ вставляСм

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(0);

Массив.Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ(0, Массив[0]); // Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° 0-ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ "Π‘"

Массив.Π£Π΄Π°Π»ΠΈΡ‚ΡŒ(1);

Массив.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚); // ДобавляСм "А" Π² ΠΊΠΎΠ½Π΅Ρ†

Π­Ρ‚ΠΎΡ‚ способ каТСтся ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π½ΠΎ ΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли:

  • πŸ”„ Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ просто ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ элСмСнты, Π½ΠΎ ΠΈ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сортировки вставками)
  • πŸ”„ Π’Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ДинамичСскимБписком ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ коллСкциями, Π³Π΄Π΅ прямой ΠΎΠ±ΠΌΠ΅Π½ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ использовании Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() индСксы всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ автоматичСски. Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ это, Ссли Π² ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ обращСния ΠΊ массиву ΠΏΠΎ индСксу послС ΠΎΠ±ΠΌΠ΅Π½Π°.
πŸ“Š Какой способ ΠΎΠ±ΠΌΠ΅Π½Π° элСмСнтов Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π‘ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
Π§Π΅Ρ€Π΅Π· Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ/Π£Π΄Π°Π»ΠΈΡ‚ΡŒ
Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
Π”Ρ€ΡƒΠ³ΠΎΠΉ

4. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΠœΠ΅ΡΡ‚Π°ΠΌΠΈ() ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ стандартных подсистСм

Π’ соврСмСнных вСрсиях 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 (начиная с 8.3.10) Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ стандартных подсистСм (Π‘Π‘ΠŸ) Π΅ΡΡ‚ΡŒ готовая функция для ΠΎΠ±ΠΌΠ΅Π½Π° элСмСнтов массива ΠΈΠ»ΠΈ списка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Она называСтся ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΠœΠ΅ΡΡ‚Π°ΠΌΠΈ() ΠΈ находится Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠžΠ±Ρ‰Π΅Π³ΠΎΠΠ°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠšΠ»ΠΈΠ΅Π½Ρ‚Π‘Π΅Ρ€Π²Π΅Ρ€.

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

ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΠœΠ΅ΡΡ‚Π°ΠΌΠΈ(Массив, ИндСкс1, ИндСкс2);

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

  • πŸ”§ ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ β€” ΠΎΠ΄Π½Π° строка вмСсто Ρ‚Ρ€Π΅Ρ…
  • πŸ”§ Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с массивами, Π½ΠΎ ΠΈ с БпискомЗначСний, Π’Π°Π±Π»ΠΈΡ†Π΅ΠΉΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
  • πŸ”§ АвтоматичСски провСряСт Π²Ρ‹Ρ…ΠΎΠ΄ индСксов Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ:

  1. Π’ вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° стандартных подсистСм (Π‘Π‘ΠŸ).
  2. Π’Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ строку: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠžΠ±Ρ‰Π΅Π³ΠΎΠΠ°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡΠšΠ»ΠΈΠ΅Π½Ρ‚Π‘Π΅Ρ€Π²Π΅Ρ€.
Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π‘Π‘ΠŸ, Ссли Π΅Ρ‘ Π½Π΅Ρ‚ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ?

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ стандартных подсистСм (Π‘Π‘ΠŸ) ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ β†’ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ β†’ ΠžΠ±Ρ‰ΠΈΠ΅ β†’ ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΡ‹. НаТмитС "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ" ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ "Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° стандартных подсистСм". ПослС этого ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ установка Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΈΠ· дистрибутива 1Π‘.

5. ОбмСн элСмСнтов Π² БпискСЗначСний ΠΈ Π’Π°Π±Π»ΠΈΡ†Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π΅ с простым массивом, Π° со БпискомЗначСний ΠΈΠ»ΠΈ Π’Π°Π±Π»ΠΈΡ†Π΅ΠΉΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠ±ΠΌΠ΅Π½ элСмСнтов ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности. НапримСр, Π² БпискСЗначСний нСльзя Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ элСмСнтам ΠΏΠΎ индСксу β€” Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ():

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

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ 1");

Бписок.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ 2");

// ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ значСния

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1 = Бписок.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(0).Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2 = Бписок.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(1).Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

// МСняСм мСстами

Бписок.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(0).Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅2;

Бписок.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(1).Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅1;

Для Π’Π°Π±Π»ΠΈΡ†Ρ‹Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π»ΠΎΠ³ΠΈΠΊΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π°, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ имя ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ:

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

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

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

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

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

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

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

// МСняСм мСстами

Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π’Π°Π±Π»ΠΈΡ†Π°[0].НаимСнованиС;

Π’Π°Π±Π»ΠΈΡ†Π°[0].НаимСнованиС = Π’Π°Π±Π»ΠΈΡ†Π°[1].НаимСнованиС;

Π’Π°Π±Π»ΠΈΡ†Π°[1].НаимСнованиС = Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² Π’Π°Π±Π»ΠΈΡ†Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ индСксация начинаСтся с 0, Π½ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ строки ΠΌΠ΅Ρ‚ΠΎΠ΄ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π’Π°Π±Π»ΠΈΡ†Ρ‹Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для прямого измСнСния.

Π’ΠΈΠΏ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΠΌΠ΅Π½Π° ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ
Массив ΠŸΡ€ΡΠΌΠΎΠ΅ присвоСниС Ρ‡Π΅Ρ€Π΅Π· индСкс Π‘Π°ΠΌΡ‹ΠΉ быстрый способ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³Ρ€Π°Π½ΠΈΡ†
БписокЗначСний ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(индСкс).Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ НуТно явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ свойство .Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Π’Π°Π±Π»ΠΈΡ†Π°Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксу строки ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ МоТно ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ поля строки
Π”Π΅Ρ€Π΅Π²ΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ(индСкс) ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ, ΠΎΠ±ΠΌΠ΅Π½ влияСт Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹

6. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π² Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΈ сортировкС

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами элСмСнты Π² Ρ†ΠΈΠΊΠ»Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сортировки), Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΎΠ±ΠΌΠ΅Π½ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² большом Ρ†ΠΈΠΊΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях:

  • πŸ”₯ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΠœΠ΅ΡΡ‚Π°ΠΌΠΈ() ΠΈΠ· Π‘Π‘ΠŸ β€” ΠΎΠ½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.
  • πŸ”₯ Для числовых массивов рассмотритС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠ˜() (хотя это экзотика для 1Π‘).
  • πŸ”₯ Если сортируСтС большой массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠΉ пСрСстановки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Π² Ρ†ΠΈΠΊΠ»Π΅ "ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки":

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

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

Если Массив[j] > Массив[j + 1] Π’ΠΎΠ³Π΄Π°

// Быстрый ΠΎΠ±ΠΌΠ΅Π½ Ρ‡Π΅Ρ€Π΅Π· Π‘Π‘ΠŸ

ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΠœΠ΅ΡΡ‚Π°ΠΌΠΈ(Массив, j, j + 1);

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

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

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

Для массивов с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 10 000 элСмСнтов ручная сортировка ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ нСсколько сСкунд. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ() с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ направлСния:

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

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

πŸ’‘

ВстроСнная сортировка массива Π² 1Π‘ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°Π·Ρ‹ быстрСС Ρ€ΡƒΡ‡Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Ρ‘ всСгда, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π° Π½Π΅ просто ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π²Π° элСмСнта.

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

Π”Π°ΠΆΠ΅ Π² простой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° элСмСнтов Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ΠΎΡ‚ самыС распространСнныС:

  1. Π’Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива: ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ индСксу (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Массив[100] Π² массивС ΠΈΠ· 10 элСмСнтов) ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС. ВсСгда провСряйтС Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Ρ‡Π΅Ρ€Π΅Π· Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…().
  2. ΠŸΠΎΡ‚Π΅Ρ€Ρ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: Если Π² массивС хранятся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, элСмСнты справочников), ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ссылку. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ явноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²: Как Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠžΠ±ΡŠΠ΅ΠΊΡ‚.НомСнклатура.
  3. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ НСопрСдСлСно: Если элСмСнт массива Ρ€Π°Π²Π΅Π½ НСопрСдСлСно, арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ сравнСния ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ошибкой. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π½Π° Π’ΠΈΠΏΠ—Π½Ρ‡().

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного ΠΎΠ±ΠΌΠ΅Π½Π° с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ:

Если Массив.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() > 1 Π’ΠΎΠ³Π΄Π°

ИндСкс1 = 0;

ИндСкс2 = 1;

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ индСксы Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… массива

Если ИндСкс1 >= 0 И ИндСкс2 >= 0

И ИндСкс1 < Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…()

И ИндСкс2 < Массив.Π’Π“Ρ€Π°Π½ΠΈΡ†Π°Ρ…() Π’ΠΎΠ³Π΄Π°

Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Массив[ИндСкс1];

Массив[ИндСкс1] = Массив[ИндСкс2];

Массив[ИндСкс2] = Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НСкоррСктныС индСксы для ΠΎΠ±ΠΌΠ΅Π½Π°!");

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

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ управляСмых Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ элСмСнтов Π² динамичСских списках (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ДинамичСскийБписок) Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ() послС измСнСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½Π°Ρ‡Π΅ измСнСния Π½Π΅ отобразятся Π½Π° экранС.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ элСмСнтов

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

FAQ: ЧастыС вопросы ΠΏΠΎ ΠΎΠ±ΠΌΠ΅Π½Ρƒ элСмСнтов Π² массивС 1Π‘

МоТно Π»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами элСмСнты Π² массивС постоянного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (Π€ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²)?

Π”Π°, Π½ΠΎ с ограничСниями. Π’ Π€ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΠœΠ°ΡΡΠΈΠ²Π΅ нСльзя Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… значСния, Π² Ρ‚ΠΎΠΌ числС мСстами. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ стандартный ΠΎΠ±ΠΌΠ΅Π½ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ЀиксМассив = Новый Π€ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ²(2);

ЀиксМассив[0] = 1;

ЀиксМассив[1] = 2;

ВрСмСнная = ЀиксМассив[0];

ЀиксМассив[0] = ЀиксМассив[1];

ЀиксМассив[1] = ВрСмСнная;

Как ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами строки Π² Π’Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅?

Для Π’Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ±ΠΌΠ΅Π½ строк рСализуСтся Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ() ΠΈ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ():

Π’Π°Π±Π”ΠΎΠΊ = Новый Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚;

// ... Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

// ВыдСляСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку

Π’Π°Π±Π”ΠΎΠΊ.Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΠΈ(1, 1);

// ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π΅Ρ‘ послС Π²Ρ‚ΠΎΡ€ΠΎΠΉ

Π’Π°Π±Π”ΠΎΠΊ.ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ(АreaAutoSizeMode.ΠŸΠΎΠ‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠΌΡƒ);

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: нумСрация строк Π² Π’Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ начинаСтся с 1, Π° Π½Π΅ с 0.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС ΠΎΠ±ΠΌΠ΅Π½Π° элСмСнтов Π² Π”Π΅Ρ€Π΅Π²Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ иСрархия?

ΠŸΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΡƒΠ·Π»ΠΎΠ² Π² Π”Π΅Ρ€Π΅Π²Π΅Π—Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ влоТСнности. Если просто ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами Π΄Π²Π° элСмСнта, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ "ΠΏΠ΅Ρ€Π΅Π΅Π΄ΡƒΡ‚" вмСстС с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ структуру:

  1. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив.
  2. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ.
  3. ΠŸΠΎΠΌΠ΅Π½ΡΠΉΡ‚Π΅ сами элСмСнты (Π±Π΅Π· Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ…).
  4. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ сохранСнныС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту.
Как ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ?

Если Π²Ρ‹ мСняСтС элСмСнты Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈΠ»ΠΈ слоТной Π»ΠΎΠ³ΠΈΠΊΠ΅, Π·Π°Ρ€Π°Π½Π΅Π΅ сохранитС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС массива:

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ² = Массив.Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ();

// ... ΠΊΠΎΠ΄ с ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ элСмСнтов

// ΠŸΡ€ΠΈ нСобходимости ΠΎΡ‚ΠΊΠ°Ρ‚Π°:

Массив = ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ².Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ();

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ врСмя, поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΏΡ€ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… опСрациях.

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами ΠΎΠ±ΠΌΠ΅Π½Π°?

Π”Π°, ΠΈ ΠΎΠ½Π° Π·Π°ΠΌΠ΅Ρ‚Π½Π° Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивах (ΠΎΡ‚ 10 000 элСмСнтов). По тСстам Π½Π° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.23:

  • ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΠœΠ΅ΡΡ‚Π°ΠΌΠΈ() ΠΈΠ· Π‘Π‘ΠŸ β€” самый быстрый (ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹).
  • ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΎΠ±ΠΌΠ΅Π½ с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” Π½Π° 10-15% ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.
  • ΠœΠ΅Ρ‚ΠΎΠ΄ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ()/Π£Π΄Π°Π»ΠΈΡ‚ΡŒ() β€” Π² 2-3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈΠ·-Π·Π° пСрСстроСния индСксов.

Для критичСских участков ΠΊΠΎΠ΄Π° рСкомСндуСтся Π·Π°ΠΌΠ΅Ρ€ΡΡ‚ΡŒ врСмя выполнСния Ρ‡Π΅Ρ€Π΅Π· ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘Π΅ΠΊΡƒΠ½Π΄Ρ‹Π”ΠΎΠ»ΠΈ().