Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
.NET 4.x

Динамический массив с возможностью изменения размера без потери данных

22.01.2017, 19:31. Показов 3439. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли в c# поддержка динамических массивов аналога:
Pascal
1
2
Mass:Array of String;
SetLength(Mass, длинна)
И желательно чтобы при изменении размера например сначало задал 7 потом 10
чтобы данные которые были с по 6 не терялись
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2017, 19:31
Ответы с готовыми решениями:

Динамический массив без размера
День добрый, сразу к делу: Создаю я значит массив, а размер не указываю, одной кнопочкой добавляю элемент в массив, другой вывожу в memo,...

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

HDD стал динамический. Какие способы "лечения" без потери данных?
Диск HDD 1 Tb стал динамическим. На нём инфа нужная. Как исправить данную проблему?

21
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
22.01.2017, 19:35
Array.Resize
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
22.01.2017, 19:36
Alexandr_7,
так пойдет?
C#
1
2
3
4
int[] arr = { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(string.Join(", ", arr));
Array.Resize(ref arr, 10);
Console.WriteLine(string.Join(", ", arr));
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
22.01.2017, 19:37
Alexandr_7, в C# нет "динамических массивов". Есть обычные массивы, над которыми можно сотворить Resize(), что внешне для тебя будет выглядеть именно так, как ты хочешь: изменение размера с сохранением содержимого (если размер увеличивается).

Если тебе нужно хранить данные, количество которых заранее неизвестно, то для этого есть более подходящие вещи типа List<T>.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
22.01.2017, 19:37  [ТС]
Что за ref
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
22.01.2017, 19:39
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Что за ref
Передача ссылки по ссылке. Чтобы можно было изменить объект, на который указывает ссылка.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
22.01.2017, 19:39  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Alexandr_7, в C# нет "динамических массивов". Есть обычные массивы, над которыми можно сотворить Resize(), что внешне для тебя будет выглядеть именно так, как ты хочешь: изменение размера с сохранением содержимого (если размер увеличивается).
Если тебе нужно хранить данные, количество которых заранее неизвестно, то для этого есть более подходящие вещи типа List<T>.
Да размер заранее неизвестьен. К томуже он может менятся в любой момент
C#
1
2
3
4
5
6
7
8
9
struct TSObjectives
        {
            TObjectives[] StatusObjectives;
            TTypeObjectives[] TypeObjectives;
            bool StatTypeTextObjectives, CheckTypeTextObjectives;
            string TextObjectives, TextCheckObjectives, ColorTextCheckObjectives;
        }
...
TSObjectives[] Objectives;
Не совсем разобрался с List<T>
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
22.01.2017, 19:43
Alexandr_7, тогда используй List<T>. Он увеличивает размер своего внетреннего массива по мере заполнения. Всё, что тебе нужно - только добавлять объекты и не париться размерами данного "хранилища".
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
22.01.2017, 19:52  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Alexandr_7, тогда используй List<T>. Он увеличивает размер своего внетреннего массива по мере заполнения. Всё, что тебе нужно - только добавлять объекты и не париться размерами данного "хранилища".
Можешь дать пример его использования
Я так пологаю
List<TSObjectives> Objectives = new List<TSObjectives>();
А как получить данные
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
22.01.2017, 19:56
Ссылка на документацию в моём первом посте за пример не считается?
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
22.01.2017, 20:02  [ТС]
Ну
Objectives[0].
но в моем случае я таким образом не могу изменить данные

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
struct TSObjectives
        {
            TObjectives[] StatusObjectives;
            TTypeObjectives[] TypeObjectives;
            bool StatTypeTextObjectives, CheckTypeTextObjectives;
            string TextObjectives;
        }
List<TSObjectives> Objectives = new List<TSObjectives>();
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
22.01.2017, 20:03
Alexandr_7, ещё раз: по приведённой мной ссылке есть как документация с полным описанием данного класса, так и примеры его использования (внизу страницы). Не вижу смысла всю это тебе сюда переписывать, если ты сам своими глазами можешь всё увидеть.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
22.01.2017, 20:08  [ТС]
Ну да там есть пример длякласа и типа string
parts[3]
Ну у меня Objectives является структурой в которойесть другие типы
И вот как к ним обратится через Objectives чтобы получить или изменить данные не могу понять
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
22.01.2017, 20:14
Alexandr_7,
C#
1
Objectives[77].TextObjectives = "hello";
Только используй классы, а не структуры. С ними есть некоторые особенности работы как со значимыми типами.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
22.01.2017, 20:19  [ТС]
Понял в чем проблема
А там обязательно добавлять данные через add или можно сразу
Просто как уже сказал что размер менятся может прямо на ходу
C#
1
2
3
4
5
6
7
8
9
10
11
private void CheckMaxObjectives()
        {
            strObjectivesCode = String.Format(readText, intMaxObjectives);
            comboBox1.Items.Clear();
            for (int i = 0; i < intMaxObjectives; i++)
                comboBox1.Items.Add(String.Format("Цель {0:d}", i+1));
            if (comboBox1.SelectedIndex < 0)
                comboBox1.SelectedIndex = SelObjectives;
            label3.Text = String.Format("Статус цели {0:d}:", 0);
            label4.Text = String.Format("Цель {0:d}:", 0);
        }
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
23.01.2017, 07:13
Alexandr_7, не совсем понял вопроса. У класса List<T> есть конструктор принимающий значение начальной ёмкости (количества элементов) коллекции. Если ты заранее знаешь, что в коллекции будет не меньше, скажем, тридцати элементов, то можно списку об этом прямо сказать, а нужные данные записывать через индекс:

C#
1
2
3
var list = new List<string>(30);
list[25] = "hello";
// остальные 29 элементов неинициализированны!
Так же есть конструктор принимающий объект класса реализующего IEnumerable, чтобы можно было сразу создать и инициализировать список содержимым другой коллекции.
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
23.01.2017, 07:53
Usaga, в Вашем примере

C#
1
2
var list = new List<string>(30);
list[25] = "hello"; // <<< вот тут
будет возникать IndexOutOfRangeException, так как изначально после создания экземпляра класса List<T> его размер равен нулю (что логично), а вот размер внутреннего массива (ёмкость) - да, будет равна 30.

Если вкратце, то: если количество элементов в листе (свойство Count) больше нуля, то можно работать с элементами через индексатор по индексам в границах от 0 до Count - 1 включительно; иначе, необходимо использовать метод Add для добавления нового элемента.
0
Эксперт .NET
 Аватар для Usaga
14140 / 9369 / 1350
Регистрация: 21.01.2016
Сообщений: 35,270
23.01.2017, 07:56
bax_tang, позорный косяк. Ты прав.
0
23.01.2017, 08:00

Не по теме:


Цитата Сообщение от Usaga Посмотреть сообщение
позорный косяк. Ты прав.
Да ладно, с кем не бывает, в понедельник-то утром.

0
 Аватар для ata
269 / 253 / 186
Регистрация: 28.10.2015
Сообщений: 723
23.01.2017, 09:11
C#
1
2
List<string> lst = new List<string>(Enumerable.Repeat(Empty.String, 30));
lst[25] = "hello";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2017, 09:11
Помогаю со студенческими работами здесь

Как сделать рамку PictureBox-а с возможностью изменения размера?
Как возможно сделать рамки примерно как тут? Хоть одну как сделать подскажите? Облазил весь гугел.

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

Уменьшение размера файла без потери цвета
Дано: файл bmp, цветной, палитра 24 бита, размер 100*100. Необходимо уменьшить размер файла (не рисунка!) чтобы не потерять значения...

Изменение размера изображения без потери качества
Подскажите как изменить размер изображения без потери качества. Я меняю а качество теряеться. Вот эти фото

Изменение размера картинок без потери качества
посоветуйте программу что бы можно было увеличивать и уменьшать размер картинок, без потери качества.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru