Массивы в С#
Массивом называют упорядоченную последовательность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов. Массивы бывают: Статические - если все границы заданы константными выражениями. Динамические - если выражения, задающие границы, зависят от переменных. Одномерные массивы Многомерные массивы Ступенчатые массивы
Одномерные массивы int[] k; //k – ссылка на одномерный массив k=new int [3]; //Определяем массив из 3-х целых k[0]=-5; k[1]=4; k[2]=55; //Задаем элементы массива Console.WriteLine(k[2].ToString()); //Выводим третий элемент массива int[] k = {-5, 4, 55};// Инициализация массива //объявление массивов с отложенной инициализацией int[] u,v; u = new int[3]; for(int i=0; i
Многомерные массивы [,...,] ; int[,] k = new int [2,3]; - двумерный массив int[,,] k = new int [10,10,10]; - трехмерного массива int[,] k = {{2,-2},{3,-22},{0,4}};- инициализация // пример перемножения матриц public void MultMatr(int[,]A, int[,]B, int[,]C){ if (A.GetLength(1) != B.GetLength(0)) Console.WriteLine("MultMatr: ошибка размерности!"); else for(int i = 0; i < A.GetLength(0); i++) for(int j = 0; j < B.GetLength(1); j++) { int s=0; for(int k = 0; k < A.GetLength(1); k++) s+= A[i,k]*B[k,j]; C[i,j] = s; }
Ступенчатые массивы int[][] k = new int [2][];- //Объявление 2-го ступенчатого массива k[0]=new int[3]; // 0-й элемент ступенчатого массива k[1]=new int[4]; // 1-й элемент ступенчатого массива
int Fcount =3; string[] Fathers = new string[Fcount]; Fathers[0] ="Николай"; Fathers[1] = "Сергей"; Fathers[2] = "Петр"; string[][] Children = new string[Fcount][]; Children[0] = new string[] {"Ольга", "Федор"}; Children[1] = new string[]{"Сергей","Валентина","Ира","Дмитрий"}; Children[2] = new string[]{"Мария","Ирина","Надежда"}; Print(Fathers,Children); // печать на экран public void Print(string [] Fathers, string[][] Children) { for(int i = 0; i < Fathers.Length; i++) { Console.WriteLine("Отец : {0}; Его дети:", Fathers[i]); for(int j = 0; j < Children[i].Length; j++) Console.Write( Children[i][j] + " "); Console.WriteLine(); }
Базовый класс System.Array Статические методы класса Array МетодОписание BinarySearch() Двоичный поиск. Clear() Выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк. Copy() Копирование части или всего массива в другой массив. IndexOf() Индекс первого вхождения образца в массив. LastIndexOf() Индекс последнего вхождения образца в массив. Reverse() Обращение одномерного массива. Sort() Сортировка одномерного массива встроенных типов данных. Свойства класса Array СвойствоОписание IsFixedSizeTrue, если массив статический LengthЧисло элементов массива RankРазмерность массива
Базовый класс System.Array GetValue() SetValue() Возвращает или устанавливает значение указанного индекса для массива. GetLowerBound() GetUpperBound() Используется для определения нижней или верхней границы выбранного измерения массива. Clone()Интерфейс ICloneable Позволяет создать плоскую или глубокую копию массива. В первом случае создаются только элементы первого уровня, а ссылки указывают на те же самые объекты. Во втором случае копируются объекты на всех уровнях. Для массивов создается только плоская копия. CopyTo()Интерфейс ICollection Копируются все элементы одномерного массива в другой одномерный массив, начиная с заданного индекса: col1.CopyTo(col2,0); GetEnumerator()Интерфейс IEnumerable Стоит за спиной цикла ForEach GetLength()Возвращает число элементов массива по указанному измерению. Динамические методы класса Array
сlass Arrs { public static int Main(string[] args) { string[] Names = new string[5]{ Саша, Маша, Олег, Света, Игорь}; //выводим элементы массива Console.WriteLine(Here is the array:); for(int i=0; i< Names.Length; i++) Console.WriteLine(Names[i]+\n); //расставляем в обратном порядке Array.Reverse(Names); for(int i=0; i< Names.Length; i++) Console.WriteLine(Names[i]+\n); //теперь удаляем всех кроме Игоря Console.WriteLine(Cleared out all but one…); Array.Clear(Names,1,4); for(int i=0; i< Names.Length; i++) Console.WriteLine(Names[i]+\n); return 0; }
public static void PrintAr(string name, Array A) { Console.WriteLine(name); switch (A.Rank) { case 1: for(int i = 0; i
Массивы как коллекции Чтение массива: public static void PrintCollection(string name, Array A) { Console.WriteLine(name); foreach (object item in A ) Console.Write("\t {0}", item); Console.WriteLine(); } Запись массива: public static void CreateCollection(Array A) { int i=0; foreach (object item in A ) //item = rnd.Next(1,10);//item read only A.SetValue(rnd.Next(1,10), i++); }
Массивы и Object public static void PrintObj(object A) { Console.WriteLine("A.GetType()={0})", A.GetType()); if (A.GetType() == typeof(System.Int32[])) { int[] temp; temp = (int[])A; for (int i = 0; i < temp.GetLength(0); i++) Console.Write("\t temp[{0}]={1}", i, temp[i]); Console.WriteLine(); } else if (A.GetType() == typeof(System.Int32[,])) { int[,] temp; temp = (int[,])A; for (int i = 0; i < temp.GetLength(0); i++) for (int j = 0; j < temp.GetLength(1); j++) Console.Write("\t temp[{0},{1}]={2}", i,j, temp[i,j]); Console.WriteLine(); } else Console.WriteLine("Аргумент не является массивом целых"); } static void Main(string[] args) { int[] col1 = { 9, 4, 2, 8 }; int[,] col4 = new int[2,2]{{2,6},{7,3}}; PrintObj(col1); PrintObj(col4); }