Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/107: Рейтинг темы: голосов - 107, средняя оценка - 4.71
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100

Как изменить размер двумерного массива?

25.05.2016, 11:37. Показов 21091. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот часть кода, создающая массив. По идее массив должен быть динамическим. Но в C# я не нашел "адекватного" способа это сделать.
Поэтому забил
(Цитата с этого форума -"Следует отметить, что динамический массив может быть только одномерным. Нижняя граница его индекса равна 0, а количество содержащихся в нем элементов возвращает его свойство Length.")

Я создаю статический массив, из миллиона записей и 11 элементов. (да 50-100 мб памяти впустую, а жаль некрасиво)
Далее заполняю (изменяю) его элементы, попутно подсчитывая номер последнего измененного элемента.
C#
1
2
3
4
5
6
7
8
9
10
11
public static int excel_array_records_count = 0; //Количество непустых записей в массиве - глобальная переменная
public static string[,] excel_array = new string[1000000, 11]; //Глобальный двумерный массив (первый элемент пустой)
public void create_excel_array(string file_path)
{
//Тут код
excel_array_records_count++;
excel_array[excel_array_records_count, 1] = ((excel_worksheet.Cells[c, column_1]).Value ?? string.Empty).ToString();
excel_array[excel_array_records_count, 1] = ((excel_worksheet.Cells[c, column_2]).Value ?? string.Empty).ToString();
//Тут код                        
 
}
Теперь мне надо изменить его размер, по возможности с минимальным использованием памяти.
Как это сделать?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2016, 11:37
Ответы с готовыми решениями:

Изменить размер двумерного массива
Как в двумерном массиве изменить размер столбцом и строк? Приведите примеры для каждого случая отдельно, пожалуйста.

Как изменить размер массива
Здравствуйте КиберФорум. Я хочу написать программу для передачи данных по NetworkStream.. так вот при отправке данных массив байтов, я...

Как изменить размер элемента массива? C#
очень надо)

6
 Аватар для NetFR
46 / 46 / 32
Регистрация: 10.05.2013
Сообщений: 180
25.05.2016, 12:29
Вот тут ребята неплохо погуляли по теме.
Как создать динамический массив?

Много источников видел, где метод Resize() преподносят как откровение, а после утверждают, что с его помощью массив становится "динамическим", ведь количество элементов не задано вручную. В одномерных. Гениально. Если же вам нужны именно массивы, а не коллекции, тут есть решение с реализацией метода на основе Array.Copy().
C#
1
2
3
4
5
6
7
8
9
10
void ResizeArray<T>(ref T[,] original, int newCoNum, int newRoNum)
    {
        var newArray = new T[newCoNum,newRoNum];
        int columnCount = original.GetLength(1);
        int columnCount2 = newRoNum;
        int columns = original.GetUpperBound(0);
        for (int co = 0; co <= columns; co++)
            Array.Copy(original, co * columnCount, newArray, co * columnCount2, columnCount);
        original = newArray;
    }
http://stackoverflow.com/quest... array-in-c
1
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
25.05.2016, 12:32
useruser, Почему бы не использовать списки?
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
26.05.2016, 07:42  [ТС]
Кхм.....
Цитата Сообщение от NetFR Посмотреть сообщение
Если же вам нужны именно массивы, а не коллекции, тут есть решение с реализацией метода на основе Array.Copy().
Цитата Сообщение от useruser Посмотреть сообщение
по возможности с минимальным использованием памяти.
Копирование из одного масива в другой это + ещё один массив. Да, после копирования второй массив будет меньше, а первый будет удалён, но во время копирования использование памяти (и нагрузка-процессорное время) возрастут.
Мне это не надо.

Цитата Сообщение от Quat1111 Посмотреть сообщение
useruser, Почему бы не использовать списки?
Не очень понял, что конкретно вы имели ввиду.
0
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
26.05.2016, 08:17
Лучще использовать не двумерный массив, а массив массивов (string[][]). Он работает быстрее, и память можно на нем сэкономить (не инициализировать пустые массивы массива).
Размер можно изменить с меньшей затратой памяти, изменяя последовательно размеры массивов.
Или можно, не парясь, сделать список списков (List<List<string>>), его размер изменить еще проще.
0
21 / 21 / 9
Регистрация: 11.09.2013
Сообщений: 72
26.05.2016, 08:31
Добрый день!
А Array.Resize не подходит?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          string[][][] arr = new string[0][][];
            Meth(out arr);
            for (int i = 0; i < arr.Length; i++)
            {
                Array.Resize<string[]>(ref arr[i], arr[i].Length + 1);
            }
 
        public void Meth(out string[][][] arr)
        {
            arr = new string[10][][];
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = new string[1][];
                arr[i][0] = new string[1];
            }
        }
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
26.05.2016, 09:04
useruser, https://msdn.microsoft.com/ru-... .110).aspx
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.05.2016, 09:04
Помогаю со студенческими работами здесь

Как лучше изменить размер динамического массива
В Шилдте в для закрепления теория по индексаторам и свойствам рекомендуют в качестве упражения создать класс динамический массив. Но у меня...

Изменить размер массива
Решаю задачу по загрузке данных из файла в массив. В файле не более 500.000 строк. Я объявляю массив фиксированной длины - миллион строк....

Изменить размер массива
UInt32 key = new UInt32; В ходе программы мне нужен другой размер, как можно поменять размер!!!

Как изменить размер двумерного вектора?
Объявление у меня такое: std::vector&lt;std::vector&lt;std::size_t&gt;&gt; Data; Изначально размер неизвестен, число строк и столбцов зависит от...

Как вычислить размер двумерного массива размера (X,Y)
Всем привет. Имеется массив вещественных и целых чисел разных размеров в виде столбцов, которые разделены табуляцией: Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru