- •Семинар 5. Ссылочные типы данных в языке с#
- •Одномерный массив в языке c#.
- •Одномерные массивы
- •Класс System.Array
- •Оператор foreach для работы с массивами
- •Примеры обработки массивов с использованием класса Array
- •Двумерный массив в языке c#.
- •Примеры обработки массивов с использованием класса Array
- •Ступенчатый массив в языке c#.
Ступенчатый массив в языке c#.
( п. 4.2.7. )
В С# есть еще один вид многомерных массивов, их называют ступенчатыми. Еще их можно назвать «массивами массивов», например, двумерный ступенчатый массив – это одномерный массив из одномерных же массивов. Как показано на рисунке.
Как видите, массивы-элементы могут быть разного размера, но они должны быть одного типа.
Объявляется двумерный неровный массив так:
int[][] mj;
Создается такой массив (также как в С++) в два этапа. Сначала в памяти размещается массив ссылок (по рисунку):
mj = new int[4][];
А потом по-одному создаются массивы-элементы (на рисунке они горизонтальные).
mj[0] = new int[3];
mj[1] = new int[4];
mj[2] = new int[2];
mj[3] = new int[3];
Теперь к ним можно обращаться:
mj[0][0] = 1; mj[3][3] = 33;
Если программист промахнется и обратится к элементу, которого не существует, например, mj[2][2], произойдет ошибка времени выполнения (компилятор такие ошибки не замечает).
Неровные массивы могут сэкономить память.
Рассмотрим несколько примеров.
Вот так можно объявить, создать и заполнить одномерный массив из трех целых чисел:
int[] m1 = { 10, 20, 30 };
То же самое для двумерного массива:
int[,] m2 = { { 10, 20, 30, }, { 11, 21, 31 }, { 12, 22, 32 } };
Иногда нужны заполненные безымянные массивы, например, чтобы передать их какому-нибудь методу в качестве параметра. Пусть метод F() получает одномерный массив
static void F(int[] m) {}
Вызвать метод можно так
int[] m = new int[] { 1, 2, 3, };
F(m);
А можно и короче, не объвляя массив с именем m.
F(new int[] { 1, 2, 3, });
Безымянные массивы могут пригодиться и для заполнения неровных массивов. Вот как можно сформировать и заполнить массив, изображенный на рисунке вначале темы:
int[][] mj = { new int[] { 1, 2, 3 },
new int[] { 1, 2, 3, 4 },
new int[] { 1, 2 },
new int[] { 1, 2, 3 } };
Пример: Составить программу нахождения произведения отрицательных (положительных) элементов массива (с использованием foreach).
sing System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{ class Program
{ static void Main(string[] args)
{ const int n = 6;
int[] a = { 4, -6, 2, 5, -3, -6 };
Console.WriteLine("Isxodnii massiv:");
foreach (int x in a) Console.Write("\t" + x);
Console.WriteLine();
int p = 1;foreach (int x in a)if (x < 0) { p *= x; }
int p2 = 1;foreach (int x in a)if (x > 0) { p2 *= x; }
Console.WriteLine("Proizvedenie otricatelnix = " + p);
Console.WriteLine("Proizvedenie polozhitelnix = " + p2);
Console.ReadLine();
}
}
}
Результат работы програмы:
