ДСнис Π‘ΡƒΠ²ΠΎΡ€ΠΎΠ² 04 фСвраля 2022

🧊 Руководство ΠΏΠΎ Π‘# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…: массивы ΠΈ Ρ†ΠΈΠΊΠ» foreach

Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΈ ступСнчатый массивы, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ†ΠΈΠΊΠ» foreach для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями ΠΈ массивами.
🧊 Руководство ΠΏΠΎ Π‘# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…: массивы ΠΈ Ρ†ΠΈΠΊΠ» foreach

ОбъявлСниС массива

Массив – это Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ возраст пяти ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ². ВмСсто создания пяти ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, создадим массив:

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива

Π’ C# массив ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

        datatype[] arrayName;
    

Π“Π΄Π΅:

datatype – Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ int, string, char ΠΈ Ρ‚. Π΄.

arrayName – имя массива (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€).

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

        int[] age;
    

Π‘ΠΎΠ·Π΄Π°Π½ массив с ΠΈΠΌΠ΅Π½Π΅ΠΌ age. Π­Ρ‚ΠΎΡ‚ массив ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ элСмСнты Ρ‚ΠΈΠΏΠ° int.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ массив, Π² C# Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для массива.

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

        // объявляСм массив
int[] age;

// выдСляСм ΠΏΠ°ΠΌΡΡ‚ΡŒ для массива
age = new int[5];
    

new int[5] – ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ массив Ρ…Ρ€Π°Π½ΠΈΡ‚ 5 элСмСнтов. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½Π° массива Ρ€Π°Π²Π½Ρ‹ 5.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив ΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ для Π½Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС:

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

        int[] age = new int[5];
    
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π°Β»

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива

Π’ C# ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ объявлСния.

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

        int [] numbers = {1, 2, 3, 4, 5};
    

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создан массив с ΠΈΠΌΠ΅Π½Π΅ΠΌ numbers ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ значСниями 1, 2, 3, 4 ΠΈ 5 Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива. Π’ этом случаС C# автоматичСски ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, подсчитывая количСство элСмСнтов Π² массивС (Ρ‚. Π΅. 5).

Π’ массивС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ порядковый Π½ΠΎΠΌΠ΅Ρ€ для опрСдСлСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива. Π’Π°ΠΊΠΆΠ΅ порядковый Π½ΠΎΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива Π² C#.

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

        // объявляСм массив
int[] age = new int[5];

// ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ массив
age[0] = 12;
age[1] = 4;
age[2] = 5;
…

    
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива Π² C#
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива Π² C#
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ массивов Π² C# начинаСтся с 0. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Ρ€Π°Π²Π΅Π½ 5, Ρ‚ΠΎ индСкс послСднСго элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 4.

Доступ ΠΊ элСмСнтам массива

Для получСния доступа ΠΊ элСмСнтам массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ индСкс массива.

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

        // доступ ΠΊ элСмСнту ΠΏΠΎ индСксу 2
array[2];

// доступ ΠΊ элСмСнту ΠΏΠΎ индСксу 4
array[4];
    

Π“Π΄Π΅:

  • array[2] – Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт массива.
  • array[4] – пятый элСмСнт массива.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: C# массив
        using System;

namespace AccessArray {
  class Program  {
    static void Main(string[] args) {

      // создаСм массив
      int[] numbers = {1, 2, 3};

      //ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту
      Console.WriteLine("Element in first index : " + numbers[0]);

      //ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту
      Console.WriteLine("Element in second index : " + numbers[1]);

      //ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ элСмСнту
      Console.WriteLine("Element in third index : " + numbers[2]);

      Console.ReadLine();

    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Element in first index : 1
Element in second index : 2
Element in third index : 3

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ создан массив с ΠΈΠΌΠ΅Π½Π΅ΠΌ numbers с элСмСнтами 1, 2, 3. ΠŸΠΎΡ€ΡΠ΄ΠΊΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΊ элСмСнтам массива.

Π—Π΄Π΅ΡΡŒ:

  • numbers[0] – доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту.
  • numbers[1] – доступ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту.
  • numbers[2] – доступ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ элСмСнту.

ИзмСнСниС элСмСнтов массива

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнт массива, присвоим Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ индСксу.

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

        using System;

namespace ChangeArray {
  class Program {
    static void Main(string[] args) {

      // ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив
      int[] numbers = {1, 2, 3};

      Console.WriteLine("Old Value at index 0: " + numbers[0]);

      // ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксу 0
      numbers[0] = 11;

      // вывСсти Π½Π° экран Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
      Console.WriteLine("New Value at index 0: " + numbers[0]);

      Console.ReadLine();
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Old Value at index 0: 1
New Value at index 0: 11

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с индСксом 0 Ρ€Π°Π²Π½ΠΎ 1. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° строчку:

        // ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксу 0
numbers[0] = 11;

    

Π’ этой строкС присваиваСтся Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 11 ΠΏΠΎ индСксу 0. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксу 0 мСняСтся с 1 Π½Π° 11.

ΠžΠ±Ρ…ΠΎΠ΄ (итСрация) массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ²

Π’ C# для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ†ΠΈΠΊΠ»Ρ‹.

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

ИспользованиС Ρ†ΠΈΠΊΠ»Π° for
        using System;

namespace AccessArrayFor {
  class Program {
    static void Main(string[] args) {

      int[] numbers = { 1, 2, 3};
 	 
      for(int i=0; i < numbers.Length; i++) {
        Console.WriteLine("Element in index " + i + ": " + numbers[i]);
      }

      Console.ReadLine();
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Element in index 0: 1
Element in index 1: 2
Element in index 2: 3

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†ΠΈΠΊΠ» for для ΠΎΠ±Ρ…ΠΎΠ΄Π° элСмСнтов массива numbers. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° строчку:

        numbers.Length
    

Π—Π΄Π΅ΡΡŒ:

Length – свойство, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π΅ Π·Π° Π΄Π»ΠΈΠ½Ρƒ массива.

Π’Π°ΠΊΠΆΠ΅ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†ΠΈΠΊΠ» foreach.

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

ИспользованиС Ρ†ΠΈΠΊΠ»Π° foreach
        using System;

namespace AccessArrayForeach {
  class Program {
    static void Main(string[] args) {
      int[] numbers = {1, 2, 3};

      Console.WriteLine("Array Elements: ");

      foreach(int num in numbers) {
        Console.WriteLine(num);
      }

      Console.ReadLine();
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Array Elements:
1
2
3

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с массивом с использованиСм System.Linq

Π’ C# пространство ΠΈΠΌΠ΅Π½ System.Linq прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ массивом.

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

Поиск минимального ΠΈ максимального элСмСнта
        using System;

 // прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивом
using System.Linq;

namespace ArrayMinMax {
  class Program  {
    static void Main(string[] args) {

      int[] numbers = {51, 1, 3, 4, 98};

      // ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт
      Console.WriteLine("Smallest  Element: " + numbers.Min());  

      // Max() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наибольшСС число Π² массивС
      Console.WriteLine("Largest Element: " + numbers.Max());  
 	 
      Console.ReadLine();
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Smallest Element: 1
Largest Element: 98

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

  • numbers.Min() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наимСньшСС число массива, 1.
  • numbers.Max() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наибольшСС число массива, 98.
Поиск срСднСго Π² массивС
        using System;
// прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивом
using System.Linq;

namespace ArrayFunction {
  class Program  {
    static void Main(string[] args) {

      int[] numbers = {30, 31, 94, 86, 55};
 	 
      // ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ суммы элСмСнтов массива
      float sum = numbers.Sum();
 	 
      // ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ количСства элСмСнтов Π² массивС
      int count = numbers.Count();
 	 
      float average = sum/count;

      Console.WriteLine("Average : " + average);
 	
      // расчСт срСднСго
      Console.WriteLine("Average using Average() : " + numbers.Average());
 	 
      Console.ReadLine();
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Average : 59.2
Average using Average() : 59.2

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ:

  • numbers.Sum() – для получСния суммы элСмСнтов.
  • numbers.Count() – для получСния количСства элСмСнтов, находящихся Π²Π½ΡƒΡ‚Ρ€ΠΈ массива.

Π—Π°Ρ‚Π΅ΠΌ сумма элСмСнтов дСлится Π½Π° количСство элСмСнтов Π² массивС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

        float average = sum / count;
    

Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ numbers.Average() пространства ΠΈΠΌΠ΅Π½ System.Linq, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ пространство ΠΈΠΌΠ΅Π½ System.Linq ΠΏΡ€ΠΈ использовании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Min(), Max(), Sum(), Count() ΠΈ Average().

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π’ этом руководствС Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Π² C# Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивах ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива Ρ‚Π°ΠΊΠΆΠ΅ массив.

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

        int[ , ] x = { { 1, 2 ,3}, { 3, 4, 5 } };
    

x – ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄Π²Π° элСмСнта: { 1, 2, 3 } ΠΈ { 3, 4, 5 }. И ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива содСрТит Ρ‚Ρ€ΠΈ элСмСнта.

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив (2D-массив) состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² качСствС элСмСнтов. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ это Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ количСством строк ΠΈ столбцов.

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив C#
Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив C#

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ { 1, 2, 3 } ΠΈ { 4, 5, 6 } – это элСмСнты 2D-массива.

ОбъявлСниС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π² C#:

        int[ , ] x = new int [2, 3];
    

x – Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов. И ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт – это Ρ‚Π°ΠΊΠΆΠ΅ массив ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов. Π—Π½Π°Ρ‡ΠΈΡ‚ массив Ρ…Ρ€Π°Π½ΠΈΡ‚ ΡˆΠ΅ΡΡ‚ΡŒ элСмСнтов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½Π°Ρ запятая [ , ] прСдставляСт собой Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

Π’ C# допустимо ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ объявлСния.

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

        int[ , ] x = { { 1, 2 ,3}, { 3, 4, 5 } };
    

x – 2D-массив с двумя элСмСнтами { 1, 2 ,3 } ΠΈ { 3, 4, 5 }. Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива Ρ‚Π°ΠΊΠΆΠ΅ массив.

Π’Π°ΠΊΠΆΠ΅ допустимо ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство строк ΠΈ столбцов Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

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

        int [ , ] x = new int[2, 3]{ {1, 2, 3}, {3, 4, 5} };
    

Доступ ΠΊ элСмСнтам 2D-массива

ΠŸΠΎΡ€ΡΠ΄ΠΊΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для доступа ΠΊ элСмСнтам Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

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

        // 2D массив
int[ , ] x = { { 1, 2 ,3}, { 3, 4, 5 } };

// доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту, ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
x[0, 0];  // вСрнётся 1

// доступ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ элСмСнту Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки
x[1, 2];  // вСрнётся 5

// доступ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ элСмСнту ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
x[0, 2];  // вСрнётся 3
    
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² C#
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² C#
Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив C#
        using System;

namespace MultiDArray {
  class Program {
    static void Main(string[] args) {
           
        // инициализация 2D массива
       int[ , ] numbers = {{2, 3}, {4, 5}};
 	 
        // ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки
       Console.WriteLine("Element at index [0, 0] : "+numbers[0, 0]);
  	 
        // ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки
       Console.WriteLine("Element at index [1, 0] : "+numbers[1, 0]);
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Element at index [0, 0] : 2
Element at index [1, 0] : 4

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ создаСтся массив с ΠΈΠΌΠ΅Π½Π΅ΠΌ numbers со строками { 2, 3 } ΠΈ { 4, 5 }.

Для доступа ΠΊ элСмСнтам Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΎΠΌΠ΅Ρ€ индСкса.

  • numbers[0, 0] – доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки (2).
  • numbers[1, 0] – доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки (4).

ИзмСнСниС элСмСнтов 2D-массива

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ элСмСнты Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. Для измСнСния элСмСнта присваиваСтся Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ индСксу.

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

        using System;

namespace MultiDArray {
  class Program {
    static void Main(string[] args) {

    int[ , ] numbers = {{2, 3}, {4, 5}};
 	 
     // старый элСмСнта
    Console.WriteLine("Old element at index [0, 0] : "+numbers[0, 0]);
 	 
      // присваиваниС Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния
    numbers[0, 0] = 222;
  	 
      // Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт
    Console.WriteLine("New element at index [0, 0] : "+numbers[0, 0]);
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Old element at index [0, 0] : 2
New element at index [0, 0] : 222

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксу [0, 0] Ρ€Π°Π²Π½ΠΎ 2. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° строку:

        // присваиваниС Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния
    numbers[0, 0] = 222;

    

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 222 ΠΏΠΎ индСксу [0, 0]. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксу [0, 0] измСнилось с 2 Π½Π° 222.

ΠžΠ±Ρ…ΠΎΠ΄ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°

        using System;

namespace MultiDArray {
  class Program  {
    static void Main(string[] args)  {

      int[ , ] numbers = { {2, 3, 9}, {4, 5, 9} };
   	 
      for(int i = 0; i < numbers.GetLength(0); i++)  { 
        Console.Write("Row "+ i+": ");

        for(int j = 0; j < numbers.GetLength(1); j++)  { 
          Console.Write(numbers[i, j]+" ");
 
        }
        Console.WriteLine(); 
  
      }  
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Row 0: 2 3 9
Row 1: 4 5 9

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for для ΠΎΠ±Ρ…ΠΎΠ΄Π° элСмСнтов Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

  • numbers.GetLength(0) – ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ количСства строк Π² 2D-массивС
  • numbers.GetLength(1) – ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ количСства элСмСнтов Π² строкС
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Π’Π°ΠΊΠΆΠ΅ допустимо ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ (3D) массив. ВСхничСски 3D массив – это массив, состоящий ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² качСствС элСмСнтов.

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

        int[ , , ] numbers = { { { 1, 3, 5 }, { 2, 4, 6 } },
                                 { { 2, 4, 9 }, { 5, 7, 11 } } };

    

Π—Π΄Π΅ΡΡŒ:

[ , , ] (2 запятыС) ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ 3D-массив.

Π‘Ρ‚ΡƒΠΏΠ΅Π½Ρ‡Π°Ρ‚Ρ‹Π΅ (Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Π΅) массивы

Рассмотрим объявлСния, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ доступ ΠΊ ступСнчатым массивам.

Π’ C# Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹ΠΉ массив состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся массивом. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

ОбъявлСниС ступСнчатого массива

Π’ΠΎΡ‚ синтаксис для объявлСния ступСнчатого массива Π² C#:

dataType[ ][ ] nameOfArray = new dataType[rows][ ];

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

        // объявляСм ступСнчатый массив
int[ ][ ] jaggedArray = new int[2][ ];

    
  • int – Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… массива.
  • [][] – прСдставляСт ступСнчатый массив.
  • jaggedArray – имя массива.
  • [2][] – ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ количСство элСмСнтов Π² ступСнчатом массивС.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ извСстно, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ступСнчатого массива – это Ρ‚ΠΎΠΆΠ΅ массив, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ массива.

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

        // Π·Π°Π΄Π°Π΄ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ массива Ρ€Π°Π²Π½Ρ‹ΠΉ 3
jaggedArray[0] = new int[3];

// Π·Π°Π΄Π°Π΄ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива Ρ€Π°Π²Π½Ρ‹ΠΉ 2
jaggedArray[1] = new int[2];

    

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ступСнчатого массива

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ способы ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ступСнчатого массива.

1. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСкса

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ массив, для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ индСкс.

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

        // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ массив
jaggedArray[0][0] = 1;
jaggedArray[0][1] = 3;
jaggedArray[0][2] = 5;

// ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив
jaggedArray[1][0] = 2;
jaggedArray[1][1] = 4;

    
  • ИндСкс Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобки прСдставляСт собой индСкс Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива.
  • ИндСкс Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобки прСдставляСт собой индСкс Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива.

2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива Π±Π΅Π· установки Ρ€Π°Π·ΠΌΠ΅Ρ€Π° элСмСнтов массива

        // объявлСниС ступСнчатого массива
int[ ][ ] jaggedArray = new int[2] [ ];

// инициализация ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива
jaggedArray[0] = new int[] {1, 3, 5};
jaggedArray[1] = new int[] {2, 4};

    

3. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΈ объявлСнии ступСнчатого массива

        int[ ][ ] jaggedArray = {
    new int[ ] {10, 20, 30},
    new int[ ] {11, 22},
    new int[ ] {88, 99}
};

    

Доступ ΠΊ элСмСнтам Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива

Доступ ΠΊ элСмСнтам Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива получаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΎΠΌΠ΅Ρ€Π° индСкса.

НапримСр:

        // доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива
jaggedArray[1][0];

// доступ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива
jaggedArray[1][1];

// доступ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ массива
jaggedArray[0][1];
    
C# Π‘Ρ‚ΡƒΠΏΠ΅Π½Ρ‡Π°Ρ‚Ρ‹ΠΉ массив
        using System;

namespace JaggedArray {
  class Program {
    static void Main(string[] args) {

     // созданиС ступСнчатого массива
     int[ ][ ] jaggedArray = {
         new int[] {1, 3, 5},
         new int[] {2, 4},
      };

     // Π²Ρ‹Π²ΠΎΠ΄ элСмСнтов ступСнчатого массива
     Console.WriteLine("jaggedArray[1][0]: " + jaggedArray[1][0]);
     Console.WriteLine("jaggedArray[1][1]: " + jaggedArray[1][1]);

     Console.WriteLine("jaggedArray[0][2]: " + jaggedArray[0][2]);

     Console.ReadLine();
    }    
  }
}
    

Π’Ρ‹Π²ΠΎΠ΄:

jaggedArray[1][0]: 2
jaggedArray[1][1]: 4
jaggedArray[0][2]: 5

Π’Π½ΡƒΡ‚Ρ€ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива:

  • jaggedArray[1][0] – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива.
  • jaggedArray[1][1] – Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ массива.
  • jaggedArray[0][2] – Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ массива.

ΠžΠ±Ρ…ΠΎΠ΄ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива

Π’ C# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ†ΠΈΠΊΠ»Ρ‹ для ΠΎΠ±Ρ…ΠΎΠ΄Π° элСмСнтов ступСнчатого массива.

НапримСр:

        using System;
	
namespace JaggedArray {
  class Program {
    static void Main(string[] args) {

      // объявляСм ступСнчатый массив
      int[][] jaggedArray = new int[2][];

      // устанавливаСт Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнтов ступСнчатого массива
      jaggedArray[0] = new int[3];
      jaggedArray[1] = new int[2];

      // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ массив
      jaggedArray[0][0] = 1;
      jaggedArray[0][1] = 3;
      jaggedArray[0][2] = 5;

      // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ массив
      jaggedArray[1][0] = 2;
      jaggedArray[1][1] = 2;
      	 
      // внСшний Ρ†ΠΈΠΊΠ» for
      for (int i = 0; i < jaggedArray.Length; i++) {

        Console.Write("Element "+ i +": ");
        // Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» for
        for (int j = 0; j < jaggedArray[i].Length; j++) {
          Console.Write(jaggedArray[i][j] + " ");
         }
      Console.WriteLine();
      }
      Console.ReadLine();
    } 
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Element 0: 1 3 5
Element 1: 2 2

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for для ΠΎΠ±Ρ…ΠΎΠ΄Π° ступСнчатого массива.

1. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Ρ†ΠΈΠΊΠ» for:

  • Доступ ΠΊ элСмСнтам (массивам) Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива.
  • jaggedArray.Length – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ i-Π³ΠΎ элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива.

2. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ» for:

  • Доступ ΠΊ элСмСнтам ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ массива Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива.
  • jaggedArray[i].Length – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ i-Π³ΠΎ массива Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива.

Π‘Ρ‚ΡƒΠΏΠ΅Π½Ρ‡Π°Ρ‚Ρ‹ΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

Π’ C# ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ элСмСнт ступСнчатого массива.

НапримСр:

        int[ ][ , ] jaggedArrayTwoD = new int[2][ , ] {
    	new int[,] { {1, 8}, {6, 7} },
    	new int[,] { {0, 3}, {5, 6}, {9, 10} }
};
    

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ступСнчатого массива – ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив:

  • new int[,] { {1, 8}, {6, 7} } – 2D-массив с двумя элСмСнтами.
  • new int[,] { {0, 3}, {5, 6}, {9, 10} } – 2D-массив с трСмя элСмСнтами.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

        using System;

namespace JaggedArray  {
  class Program {
    static void Main(string[] args)  {
  	 
      // объявляСм ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ступСнчатый массив с 2D массивами
      int[][,] jaggedArray = new int[3][ , ]  {
          new int[ , ] { {1, 8}, {6, 7} },
          new int[ , ] { {0, 3}, {5, 6}, {9, 10} },
          new int[ , ] { {11, 23}, {100, 88}, {0, 10} }
      };

      Console.WriteLine(jaggedArray[0][0, 1]);
      Console.WriteLine(jaggedArray[1][2, 1]);
      Console.WriteLine(jaggedArray[2][1, 0]);

      Console.ReadLine();
    }    
  }
}
    

Π’Ρ‹Π²ΠΎΠ΄:

8
10
100

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄:

        jaggedArray[0][0, 1]

    
  • [0] – это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт (2D-массив) Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива
  • [0, 1] – это Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ массива Π²Π½ΡƒΡ‚Ρ€ΠΈ 2D-массива

Π¦ΠΈΠΊΠ» foreach

C# прСдоставляСт ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ Ρ†ΠΈΠΊΠ»Ρƒ for ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ элСмСнтов массивов ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ – Ρ†ΠΈΠΊΠ» foreach. Π¦ΠΈΠΊΠ» foreach ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт, поэтому ΠΎΠ½ называСтся Ρ†ΠΈΠΊΠ»ΠΎΠΌ foreach – для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ.

Бинтаксис Ρ†ΠΈΠΊΠ»Π° foreach

        foreach (element in iterable-item)
{
    // Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° foreach
}

    

iterable-item – ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ массивом ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» foreach?

Π Π°Π±ΠΎΡ‚Π° Ρ†ΠΈΠΊΠ»Π° C# foreach
Π Π°Π±ΠΎΡ‚Π° Ρ†ΠΈΠΊΠ»Π° C# foreach

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово in ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСстС с Ρ†ΠΈΠΊΠ»ΠΎΠΌ foreach для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов iterable-item. in Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнт ΠΈΠ· iterable-item Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ сохраняСт Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ element.

На ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт iterable-item сохраняСтся Π² element. На Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт сохраняСтся Π² element ΠΈ Ρ‚. Π΄.

Число Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ»Π° foreach Ρ€Π°Π²Π½ΠΎ количСству элСмСнтов Π² массивС ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for:

Π’Ρ‹Π²ΠΎΠ΄ массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ» for
        using System;
 
namespace Loop
{
    class ForLoop
    {
        public static void Main(string[] args)
        {
            char[] myArray = {'H','e','l','l','o'};
 
            for(int i = 0; i < myArray.Length; i++)
            {
                Console.WriteLine(myArray[i]);
            }
        }
    }
}

    

Π­Ρ‚Π° ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° foreach.

Π’Ρ‹Π²ΠΎΠ΄ массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ» foreach
        using System;
 
namespace Loop
{
    class ForEachLoop
    {
        public static void Main(string[] args)
        {
            char[] myArray = {'H','e','l','l','o'};
 
            foreach(char ch in myArray)
            {
                Console.WriteLine(ch);
            }
        }
    }
}

    

ПослС запуска ΠΎΠ±Π΅ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

H
e
l
l
o

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ†ΠΈΠΊΠ» foreach ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ массив myArray. На ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, Ρ‚. Π΅. myArray[0] выбираСтся ΠΈ сохраняСтся Π² ch.

Аналогично, Π½Π° послСднСй ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ выбираСтся послСдний элСмСнт, Ρ‚. Π΅. myArray[4]. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° выводится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ch.

ΠŸΡ€ΠΈ рассмотрСнии ΠΎΠ±Π΅ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ Ρ†ΠΈΠΊΠ» foreach, выглядит ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ ΠΈ Π»Π΅Π³ΠΊΠΎΠΉ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ. Π­Ρ‚ΠΎ связано с простотой ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ синтаксиса foreach.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° подсчитываСт количСство ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² муТского ΠΈ ТСнского ΠΏΠΎΠ»Π°.

ΠžΠ±Ρ…ΠΎΠ΄ массива ΠΏΠΎΠ»ΠΎΠ² с использованиСм Ρ†ΠΈΠΊΠ»Π° foreach
        using System;
 
namespace Loop
{
    class ForEachLoop
    {
        public static void Main(string[] args)
        {
            char[] gender = {'m','f','m','m','m','f','f','m','m','f'};
            int male = 0, female = 0;
            foreach (char g in gender)  
            {
                if (g == 'm')
                        male++;
                else if (g =='f')
                        female++;
            }
            Console.WriteLine("Number of male = {0}", male);
            Console.WriteLine("Number of female = {0}", female);
        }
    }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Number of male = 6
Number of female = 4

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° подсчитываСт сумму элСмСнтов Π² List.

Π¦ΠΈΠΊΠ» foreach с List (список ΠΈΠ»ΠΈ коллСкция)
        using System;
using System.Collections.Generic;
namespace Loop {
  class ForEachLoop {
    public static void Main(string[] args) {
      var numbers = new List<int>() { 5, -8, 3, 14, 9, 17, 0, 4 };
      int sum = 0;
      foreach (int number in numbers) {
        sum += number;
      }
      Console.WriteLine("Sum = {0}", sum);
      Console.ReadLine();
    }
  }
}

    

Π’Ρ‹Π²ΠΎΠ΄:

Sum = 44

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ†ΠΈΠΊΠ» foreach ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. ΠžΠ±Ρ…ΠΎΠ΄ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠ±Ρ…ΠΎΠ΄ массива.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ выбираСтся Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚. Π΄. Π΄ΠΎ послСднСго элСмСнта.

***

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ

  • Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΈ ступСнчатыми массивами.
  • Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ foreach.
  • О пространствС ΠΈΠΌΠ΅Π½ System.Linq ΠΈ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Π’ΠΠšΠΠΠ‘Π˜Π˜

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вакансию
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ C++
Москва, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•