Динамический массив си шарп

Динамические массивы

Во всех вышеприведенных примерах объявлялись статические массивы, поскольку нижняя граница равна нулю по определению, а верхняя всегда задавалась в этих примерах константой. Напомню, что в C# все массивы, независимо от того, каким выражением описывается граница, рассматриваются как динамические, и память для них распределяется в «куче». Полагаю, что это отражение разумной точки зрения: ведь статические массивы, скорее исключение, а правилом является использование динамических массивов. В действительности реальные потребности в размере массива, скорее всего, выясняются в процессе работы в диалоге с пользователем.

Чисто синтаксически нет существенной разницы в объявлении статических и динамических массивов. Выражение, задающее границу изменения индексов, в динамическом случае содержит переменные. Единственное требование — значения переменных должны быть определены в момент объявления. Это ограничение в C# выполняется автоматически, поскольку хорошо известно, сколь требовательно C# контролирует инициализацию переменных.

Приведу пример, в котором описана работа с динамическим массивом:

//объявление динамического массива A1

Console.WriteLine(«Введите число элементов массива A1»);

int size = int.Parse(Console.ReadLine());

В особых комментариях эта процедура не нуждается. Здесь верхняя граница массива определяется пользователем.

Многомерные массивы

Уже объяснялось, что разделение массивов на одномерные и многомерные носит исторический характер. Никакой принципиальной разницы между ними нет. Одномерные массивы -это частный случай многомерных. Можно говорить и по-другому: многомерные массивы являются естественным обобщением одномерных. Одномерные массивы позволяют задавать такие математические структуры как векторы, двумерные — матрицы, трехмерные — кубы данных, массивы большей размерности — многомерные кубы данных. Замечу, что при работе с базами данных многомерные кубы, так называемые кубы OLAP, встречаются сплошь и рядом.

В чем особенность объявления многомерного массива? Как в типе указать размерность массива? Это делается достаточно просто, за счет использования запятых. Вот как выглядит объявление многомерного массива в общем случае:

Число запятых, увеличенное на единицу, и задает размерность массива. Что касается объявителей, то все, что сказано для одномерных массивов, справедливо и для многомерных. Можно лишь отметить, что хотя явная инициализация с использованием многомерных константных массивов возможна, но применяется редко из-за громоздкости такой структуры. Проще инициализацию реализовать программно, но иногда она все же применяется. Вот пример:

Давайте рассмотрим классическую задачу умножения прямоугольных матриц. Нам понадобится три динамических массива для представления матриц и три процедуры, одна из которых будет заполнять исходные матрицы случайными числами, другая — выполнять умножение матриц, третья — печатать сами матрицы. Вот тестовый пример:

Читайте также:  Решить задачи в javascript

public void TestMultiMatr()

Arrs.GetSizes(«MatrA»,out n1,out m1);

Arrs.GetSizes(«MatrB»,out n2,out m2);

Arrs.GetSizes(«MatrC»,out n3,out m3);

int[,]MatrA = new int[n1,m1], MatrB = new int[n2,m2];

Arrs.MultMatr(MatrA, MatrB, MatrC);

Три матрицы — MatrA, MatrB и MatrC — имеют произвольные размеры, выясняемые в диалоге с пользователем, и использование для их описания динамических массивов представляется совершенно естественным. Метод CreateTwoDimAr заполняет случайными числами элементы матрицы, переданной ему в качестве аргумента, метод PrintAr2 выводит матрицу на печать. Я не буду приводить их код, похожий на код их одномерных аналогов.

Метод MultMatr выполняет умножение прямоугольных матриц. Это классическая задача из набора задач, решаемых на первом курсе. Вот текст этого метода:

public void MultMatr(int[,]A, int[,]B, int[,]C)

if (A.GetLength(1) != B.GetLength(0))

Console.WriteLine(«MultMatr: ошибка размерности!»);

В особых комментариях эта процедура не нуждается. Замечу лишь, что прежде чем проводить вычисления, производится проверка корректности размерностей исходных матриц при их перемножении, — число столбцов первой матрицы должно быть равно числу строк второй матрицы.

Обратите внимание, как выглядят результаты консольного вывода на данном этапе работы (рис. 11.2).

Рис. 11.2. Умножение матриц

Источник

Статья Как создать динамический массив в c#

На днях мне попалась задача, для решения которой требовалось создать динамический массив. Обычно я привык вместо массивов использовать обобщенные списки List, которые по умолчанию являются динамическими. Но, по условию задачи требовалось работать именно с массивом, который не является таковым, поэтому возникла небольшая проблема, решение которой описано в этой статье.

В языке c# под словом массив подразумевается объект с заранее заданным неизменяемым размером. То есть, к примеру, если Вы создали массив, который содержит пять элементов, то увеличить данный размер динамически Вы уже не сможете, так как он является фиксированным. В этом можно легко убедиться, воспользовавшись свойством IsFixedSize.

int [] numbers = new int [5]; bool fix = numbers.IsFixedSize; //true

С помощью данного свойства Вы можете определить, имеет ли созданный массив фиксированную длину. Если результатом является значение true, как в данном примере, то это значит, что мы не можем добавлять или удалять элементы в уже созданном массиве, то есть изменять его текущий размер. Но, при этом мы можем изменять его существующие элементы.

Так как задача довольно актуальная, то какой-то способ решения всё-таки должен быть. И он есть. Если Вам необходимо создать динамический массив, то Вы можете воспользоваться, например методом Resize класса System.Array.

static void Main(string [] args) < int length = 0; int [] numbers = new int [5] ; length = numbers.Length; //5 Array.Resizeint>(ref numbers, 7); //либо так //Array.Resize(ref numbers, numbers.Length + 2); length = numbers.Length; //7 Результат: //- элементы >

Данный метод принимает два параметра: имя массива и его новый размер. В ходе выполнения метода, будет создан новый массив указанной нами длины, после чего все значения из старого массива будут скопированы в него. В результате мы получаем динамический массив. Задача решена.

Читайте также:  Microsoft iis and php

Либо мы можем схитрить и всё-таки решить данную задачу, воспользовавшись обобщенным списком List класса System.Collections.Generic, например:

static void Main(string [] args) < int count = 0; Listnumbers = new List < 1, 2, 3, 4, 5 >; count = numbers.Count; //5 numbers.Add(6); numbers.Add(7); count = numbers.Count; //7 //преобразуем список в массив int [] numbers2 = numbers.ToArray(); >

Вместо массива мы используем список, который, как уже говорилось ранее, по умолчанию является динамическим. С помощью него мы выполняем всю необходимую работу и как только добиваемся нужного результата, то с помощью метода ToArray преобразуем список в массив.

Источник

Как создать динамический массив?

Как создать динамический массив
Так случилось, что потребовался "глобальный"(в разных event’ах используется) массив. Создал.

Как создать динамический массив?
Я так понимаю что в c# массивы можно создавать только определенного размера. Как же быть в тех.

Re: Как создать динамический массив?
А нормального массива нету? ArrayList тоже что попало, по индексу обратится нельзя ArrayList arr =.

Как создать двумерный динамический массив
Как создать двумерный массив на C# (размерность неизвестна, вычисляется в ходе работы программы) и.

int[,] a = new int[2,3] { { 1, 2, 3 }, { 1, 2, 3 } };

Динамического массива в C# нет. Так как массив имеет заданную величину, которую изменить можно ток с помощью перезаписи данного массива в другой.

Patlat, Почему же? Насколько я помню, в шарпах только динамические массивы.
То-есть, это будет, что «статический» массив, что динамический, он будет обьявляться при помощи

Вышеуказаный — прямоугольный массив. Так же есть «зубчатый» массив, обявляется он приблизительно так:

int[][] myArr = new int[4][]; myArr[0] = new int[4]; myArr[1] = new int[6]; myArr[2] = new int[3]; myArr[3] = new int[4];

ЦитатаСообщение от NewNoob Посмотреть сообщение

Да ты че? Хочешь сказать, что я не могу размерность массива менять при его создании? Или этот массив на стеке?
Динамических массивов и в С нет. В С есть только упыри-студенты, которые указатель, указывающий на непрерывную область памяти, выделенной динамически, называют динамическим массивом.

Не пойму, о чем вы все. Не вдаваясь глубоко в детали, в качестве динамического массива в шарпе служит List, его и надо использовать. А размер обычных массивов, насколько я знаю, не меняется, их можно только пересоздать. Либо через new, либо через Array.Resize . Или я что-то не понимаю?

Читайте также:  Бот python telegram bot код

ЦитатаСообщение от EvilFromHell Посмотреть сообщение

ЦитатаСообщение от NewNoob Посмотреть сообщение

Velesthau, сомневаюсь, что ТСа интересовали детали реализации, скорее всего, его интересовало только то, как сделать массив с нефиксированным количеством элементов, которые можно добавлять/удалять, и все

ЦитатаСообщение от Newbie_cry Посмотреть сообщение

Вы не правильно помните Хотя если приведёте хоть один пример динамического массива.
Да, динамический массив, этот тот, который может менять свой размер от первоначально заданного., а в шарпе это под силу, как уже сказали ранее, коллекции List.

ЦитатаСообщение от EvilFromHell Посмотреть сообщение

сомневаюсь, что ТСа интересовали детали реализации, скорее всего, его интересовало только то, как сделать массив с нефиксированным количеством элементов, которые можно добавлять/удалять, и все

А я очень сомневаюсь, что ему интересен массив , в который можно добавлять и удалять элементы. «Динамический массив» это в 99% случаев у сишников просто массив в области динамической памяти. ТС детали реализации не интересовали. И ему пофиг на добавление и удаление элементов. И в Си нет аналога List. Он не подходит под «подобно тому, как в С». Так вот ты не ответил. Подобно чему же как в С этот самый List?

Добавлено через 3 минуты

ЦитатаСообщение от Patlat Посмотреть сообщение

Источник

Как создать динамический массив и заполнить его с клавиатуры

Создать динамический массив, размер которого пользователь вводит с клавиатуры.Заполнить его случайными числами
Кто знает, как на С++: создать динамический массив, размер которого пользователь вводит с.

Как создать глобальный динамический массив и заполнить его
Всем привет! Мне нужно каким-то образом создать глобальный динамический массив и заполнить его. но.

Как создать динамический двумерный массив и самому его заполнить?
Как создать динамический двумерный массив и самому его заполнить?

Как создать динамический трехмерный массив и заполнить его случайными значениями?
Я больше по Java, но сейчас надо сделать пару задачек по плюсам. Одна из них звучит как-то так: .

Лучший ответ

Сообщение было отмечено SMOuk24 как решение

Решение

Вы создали статический массив. Динамический в шарпе представлен классом List:

1 2 3 4 5 6 7 8 9 10 11 12
string buf; var a = new Listint>(); Console.WriteLine("Для окончания ввода дважды нажмите Enter"); Console.WriteLine("Введите новый элемент"); while (!string.IsNullOrEmpty((buf = Console.ReadLine()))) { a.Add(Convert.ToInt32(buf)); Console.WriteLine("Введите новый элемент"); } Console.WriteLine(string.Join(" ", a)); Console.ReadKey();

Источник

Оцените статью