Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
1

Изменить размер массива

27.12.2015, 11:47. Показов 1886. Ответов 5
Метки нет (Все метки)

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

Загружаю данные в массив. И считаю количество не пустых записей.
Я знаю, что мои данные начинаются с первой записи и заканчиваются MY_table_records_count записью.

Файлы бывают разные. Поэтому в моём массиве остаются лишние пустые строки. Это, наверно, занимает память.
Как убрать эти лишние строки - изменить размер массива, после его создания?

В Delphi это было бы так
Delphi
1
SetLength(MY_table, MY_table_records_count);
В Delphi, такая оптимизация существенно влияет на размер занимаемой оперативной памяти.
В c# я такого не заметил, что очень странно. Но всё же - как изменить размер уже созданного двумерного массива?
Нужно изменить только количество записей.

Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void load_MY_xml_in_memory()
{
// Объявляем двумерный массив
string[,] MY_table = new string[100000, 4];
int MY_table_records_count = 0; //Количество непустых записей в массиве (изначально 0 записей)
 
xmlDoc.Load("XML_files\\MY\\MY.xml");
foreach (XmlNode task in xmlDoc.DocumentElement.ChildNodes)
{
MY_table_records_count = MY_table_records_count + 1;
MY_table[MY_table_records_count, 0] = task.Attributes.GetNamedItem("ONE").Value;
MY_table[MY_table_records_count, 1] = task.Attributes.GetNamedItem("TWO").Value;
MY_table[MY_table_records_count, 2] = task.Attributes.GetNamedItem("THREE").Value;
MY_table[MY_table_records_count, 3] = task.Attributes.GetNamedItem("FOUR").Value;
} 
//Мы создали массив в миллион записей, а реально заполнено, скажем 90000. Остальные пустые.         
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2015, 11:47
Ответы с готовыми решениями:

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

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

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

Как изменить размер двумерного массива?
Вот часть кода, создающая массив. По идее массив должен быть динамическим. Но в C# я не нашел...

5
59 / 59 / 54
Регистрация: 19.02.2012
Сообщений: 262
27.12.2015, 12:01 2
а не проще ли для этого использовать List?
0
Заблокирован
27.12.2015, 12:02 3
че это за хрень? что за файл и что с ним надо сделать? можно просто FileReadAllLines, если xml то есть XmlDocument / XmlSerializer и еще много классов для работы с xml
0
TheGreatCornholio
1254 / 732 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
27.12.2015, 12:05 4
Цитата Сообщение от ioane Посмотреть сообщение
а не проще ли для этого использовать List?
List чего? Может, DataTable?
https://msdn.microsoft.com/ru-... .110).aspx
0
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
27.12.2015, 12:48  [ТС] 5
Цитата Сообщение от ioane Посмотреть сообщение
а не проще ли для этого использовать List?
Не пробовал. Говорят не проще. Читал статьи. Но может это правильнее. Но сложнее.
Массив так и просится для такого типа информации.
Мне проще либо динамический массив, либо изменить размер статического.

Цитата Сообщение от Volrajas Посмотреть сообщение
че это за хрень?
Стандартная работа с xml документом.

Цитата Сообщение от Volrajas Посмотреть сообщение
если xml то есть XmlDocument / XmlSerializer
Как бы код
Цитата Сообщение от useruser Посмотреть сообщение
xmlDoc.Load("XML_files\\MY\\MY.xml"); foreach (XmlNode task in xmlDoc.DocumentElement.ChildNodes)
намекает на то, что это xml документ.

А код
C#
1
XmlNode task in xmlDoc.DocumentElement.ChildNodes
говорит, что я в 99% использую
C#
1
XmlDocument xmlDoc = new XmlDocument();
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,340
Записей в блоге: 1
27.12.2015, 20:22 6
useruser, не надо ничего обрезать. Выделяй память под нужное кол-во элементов сразу.
C#
1
2
xmlDoc.Load("XML_files\\MY\\MY.xml");
string[,] MY_table = new string[xmlDoc.DocumentElement.ChildNodes.Count, 4];
0
27.12.2015, 20:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2015, 20:22
Помогаю со студенческими работами здесь

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

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

Изменить размер BitMap
Здравствуйте Для создания Bitmap иного размера можно использовать : Bitmap NewBitmap = new...

Изменить размер и формат изображения
Как можно изменить размер и формат изображения? Нашёл фрагмент программы и использовал у себя в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru