Урок за C# масив: Създаване, деклариране, инициализиране

⚡ Умно обобщение

Масивите в C# съхраняват колекция от елементи с фиксиран размер, които споделят един и същ тип данни, под едно име на променлива. Всеки елемент е с индекс, базиран на нула, така че декларирането, инициализирането и достъпът до стойности остават бързи и предвидими.

  • 📌 Определение: Масивът съдържа множество стойности от един тип в индексирани позиции, до които се достига чрез една променлива.
  • Декларация: Тип данни, последван от квадратни скоби и име, декларира масив, например стойности на Int32[].
  • 🔢 Инициализация: Ключовата дума new задава размера, след което всеки индекс получава стойност, например values[0]=1.
  • 🔍 Достъп: Индексирането, базирано на нула, чете или записва произволен елемент, така че първият елемент е values[0] и броенето започва от 0.
  • 🔁 Повторение: Цикълът foreach обхожда всеки елемент без индекс, което избягва грешки извън диапазона при по-големи масиви.
  • 🤖 AI помощ: GitHub Copilot генерира шаблони за масиви, докато ML.NET зарежда числови масиви като функции за модели за машинно обучение.

C# масиви

Какво е масив в C#?

Масивът се използва за съхраняване на колекция или поредица от елементи. Тези елементи ще бъдат от един и същи тип.

Така например, ако имате масив от стойности Integer, масивът може да бъде колекция от стойности като [1, 2, 3, 4]. Тук броят на елементите в масива е 4.

Масивите са полезни, когато искате да съхранявате колекция от стойности от един и същи тип. Така че вместо да декларирате a променлив за всеки елемент можете просто да декларирате една променлива.

Тази променлива ще сочи към масив или списък от елементи, които ще отговарят за съхраняването на елементите на масива.

Нека да разгледаме как можем да работим с масиви в C#. В нашия пример ще декларираме масив от цели числа и ще работим с тях по съответния начин.

Имайте предвид, че целият код по-долу се прави във файла Program.cs.

Стъпка 1) Деклариране на масив – Първата стъпка е да декларирате масив. Нека видим как можем да постигнем това чрез примера на код по-долу.

Масиви в C#

Code Обяснение:

  1. Първата част е тип данни. Той определя вида на елементите, използвани в масива. Така че в нашия случай ние създаваме масив от цели числа.
  2. Втората част [ ], която указва ранга на масива. (Рангът е контейнер, който указва броя на елементите, които масивът ще съдържа)
  3. Следва името на масива, което в нашия случай е „стойности“. Обърнете внимание, че виждате зелено криволичещо подчертаване, не се притеснявайте за това. Това просто .Net казва, че сте декларирали масив, но не го използвате никъде.

Стъпка 2) Следващата стъпка е да инициализирате масива. Тук ще посочим броя на стойностите, които масивът ще съдържа. Също така ще присвоим стойности на всеки елемент от масива.

Масиви в C#

Code Обяснение:

  1. Първо, задаваме броя на елементите, които масивът ще съдържа на 3. Така че в квадратните скоби казваме, че масивът ще съдържа 3 елемента.
  2. След това присвояваме стойности на всеки елемент от масива. Можем да направим това, като укажем името на променливата + индексната позиция в масива. Така че values[0] означава, че съхраняваме стойност на първата позиция в масива. По подобен начин, за да достъпим втората позиция, използваме нотацията values[1] и така нататък.

Забележка: – В масивите позицията на индекса започва от 0.

Стъпка 3) Нека сега изведем отделните елементи на масива в конзолата. Нека добавим кода по-долу, за да постигнем това.

Масиви в C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args) 
  {
   Int32[] value;
   value=new Int32[3];
   
   value[0]=1;
   value[1]=2;
   value[2]=3;
   
   Console.WriteLine(value[0]);
   Console.WriteLine(value[1]);
   Console.WriteLine(value[2]);
    
   Console.ReadKey(); 
  }
 }
}

Code Обяснение:

Това е простата част, в която просто използваме метода Console.WriteLine, за да изпратим всяка стойност на елемента към конзолата.

Имайте предвид, че отново имаме достъп до всеки елемент с помощта на името на променливата на масива заедно с позицията на индекса.

Ако горният код е въведен правилно и програмата се изпълни, ще се покаже следният изход.

Изход:

Масиви в C#

От изхода можете да видите всички стойности на масива, които се показват в конзолата.

Как да се обходи през C# масив с помощта на foreach

Четенето на всеки елемент по неговия индекс работи, но става досадно, когато масивът съдържа много стойности. Цикълът foreach предлага по-чист начин за посещение на всеки елемент от масива по ред, без... tracцарете сами индексна променлива.

Операторът foreach взема всеки елемент от масива един по един и го копира в променлива на цикъла. След това използвате тази променлива в тялото на цикъла. Тъй като цикълът спира автоматично на последния елемент, foreach елиминира риска от четене след края на масива.

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Int32[] values = new Int32[3] {1, 2, 3};
   foreach (Int32 item in values)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

Горният пример декларира и инициализира масив от три цели числа, след което го обхожда с foreach. При всяко преминаване променливата точка получава следващата стойност и Console.WriteLine я отпечатва. Изходът са числата 1, 2 и 3 на отделни редове.

Ключови моменти, които трябва да се запомнят за foreach с масиви:

  • Променливата на цикъла е само за четене, така че foreach е най-подходяща за четене на стойности, вместо за промяната им на място.
  • За да променяте елементи, докато сте в тоалетнатаping, използвайте for цикъл с индекс вместо това.
  • foreach работи с едномерни масиви, многомерни масиви и всяка колекция, която поддържа итерация.

Многомерни масиви в C#

Показаните дотук масиви са едномерни, което означава, че съхраняват прост списък от стойности. C# поддържа и многомерни масиви, които подреждат елементите в мрежа от редове и колони. Двумерният масив е най-често срещаната форма и е подходящ за данни като матрици, игрални дъски и таблици.

Декларирате двуизмерен масив, като поставите запетая в квадратните скоби. Всяка допълнителна запетая добавя още едно измерение, така че int[,] е двуизмерен, а int[,,] е триизмерен. След това до елементите се достига с по един индекс на измерение.

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[,] matrix = new int[2, 2] { {1, 2}, {3, 4} };
   Console.WriteLine(matrix[0, 0]);
   Console.WriteLine(matrix[1, 1]);
   Console.ReadKey();
  }
 }
}

Тук матрицата масив съдържа два реда и две колони. Елементът матрица[0, 0] връща 1, а матрица[1, 1] връща 4. Броят на измеренията е фиксиран при декларирането на масива, докато размерът на всяко измерение се задава при създаването му.

C# назъбени масиви

Назъбеният масив е масив, чиито елементи самите по себе си са масиви. За разлика от правоъгълния многоизмерен масив, всеки вътрешен масив може да има различна дължина, поради което назъбеният масив често се нарича масив от масиви. Тази гъвкавост помага, когато редовете естествено съдържат различен брой стойности.

Декларирате назъбен масив с два комплекта квадратни скоби, след което създавате всеки вътрешен масив поотделно. Следващият пример изгражда назъбен масив, където първият ред съдържа три стойности, а вторият ред съдържа две.

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[][] jagged = new int[2][];
   jagged[0] = new int[] {1, 2, 3};
   jagged[1] = new int[] {4, 5};
   Console.WriteLine(jagged[0][2]);
   Console.WriteLine(jagged[1][1]);
   Console.ReadKey();
  }
 }
}

Изразът jagged[0][2] чете третия елемент от първия ред, който е 3, а jagged[1][1] чете втория елемент от втория ред, който е 5. Тъй като всеки ред е отделен масив, назъбените масиви използват паметта ефективно, когато дължините на редовете варират, въпреки че се нуждаят от допълнителна стъпка за инициализиране на всеки вътрешен масив.

Въпроси и Отговори

Свойството Length връща общия брой елементи в C# масив. Например, values.Length дава 3 за масив с три елемента. За многомерни масиви, GetLength(dimension) връща размера на всяко специфично измерение.

AC# масивът има фиксиран размер, зададен при създаването му, докато списъкът (List) расте и се свива динамично. Масивите са по-бързи за фиксирани данни и използват по-малко режийни разходи, докато списъкът (List) е подходящ за колекции, чийто брой елементи се променя по време на изпълнение.

Стандартният C# масив съхранява елементи от един деклариран тип, така че смесването на типове не е разрешено. За да съхранявате различни типове, декларирайте масив object[] или използвайте колекция като ArrayList, въпреки че и двете жертват безопасността на типовете по време на компилация.

Статичният метод Array.Sort подрежда елементите на C# масив във възходящ ред на място. Предайте масива на Array.Sort(values) и използвайте Array.Reverse след това за низходящ ред. Сортирането работи с числа, низове и други сравними типове.

Array.Copy дублира диапазон от елементи от един масив в друг, докато методът Clone създава повърхностно копие на целия масив. Присвояването на една променлива на масив на друга копира само препратката, а не подлежащите елементи.

Изключение IndexOutOfRangeException възниква, когато кодът осъществява достъп до позиция в масив, която не съществува, като например values[5] в масив с три елемента. Тъй като масивите в C# са базирани на нула, валидните индекси започват от 0 до Length минус едно. Винаги първо валидирайте индекс.

Да. GitHub Copilot предлага декларации на масиви, инициализация и логика на цикъла от коментар или име на метод във Visual Studio и VS Code. RevПрегледайте всяко предложение за правилно оразмеряване и граници на индекса, тъй като Copilot може да въведе грешки извън обхвата и отклонение от едно.

ML.NET представя векторите на характеристиките и входните данни на модела като C# масиви, обикновено float[] масиви. Данните за обучение се зареждат в масиви или span-ове, а прогнозите връщат масиви от резултати. Фиксираният размер и бързото индексиране на масивите ги правят ефективни за конвейери за машинно обучение.

Обобщете тази публикация с: