Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
1

Как правильно воспользоваться List<T>?

14.12.2018, 07:23. Показов 1757. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На данный момент самое сложное что использую это
C#
1
List<string> strout = new List<string>();
данные представлены так:
Лондон
Париж
Москва

вроде понятно как работает и как пользоваться. Но есть интерес загрузить данные из файла, где в одной строке будет 10 чисел, если весь массив представлять как матрицу, то размерность будет 10 столбцов на Х строк. Где Х зависит от файла и заранее неизвестно.
То есть данные представлены как:
0, 10, 345, 12, 18, 6, 2, 364, 23, 53
20, 510, 7345, 142, 128, 556, 20, 3164, 3, 3
80, 610, 4, 1, 86, 63, 12, 4, 2223, 153

Как мне организовать List<T> в этом случае?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2018, 07:23
Ответы с готовыми решениями:

Как правильно записать данные в List?
Пишу программу для создания тестов. Первый класс class Answer { public String...

List<T> => DataTable => DataGridView: как правильно?
Добрый день! Хрестоматийный пример public class Person { public int Id { get;...

Как правильно забиндить List<string> к ComboBox
есть класс Clfs, в котором есть private List&lt;string&gt; _listProjectName = new List&lt;string&gt;(); ...

Подскажите как правильно сделать вывод list<> в ListVew
Здравствуйте,есть приложение в винформ, теперь вот осваиваю WPF и смотрю паттерн MVVM. Если на...

31
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
17.12.2018, 12:52  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Usaga Посмотреть сообщение
Очень странное утверждение
Вовсе нет. Все люди разные. Я не запоминаю вещи если ими не пользуюсь. Моя супруга помнит всю школьную программу, но совершенно не способна водить автомобиль.

Цитата Сообщение от Usaga Посмотреть сообщение
Для того, чтобы хоть с какой-то ненулевой скоростью писать на C#, вам нужно понимать базовые вещи
Только те что могут пригодиться. Какие именно - узнаю по ходу пьесы.

Цитата Сообщение от Usaga Посмотреть сообщение
Методом тыка всё это изучать неэффективно, но если у вас времени навалом, то можно
Как раз для меня метод тука самый эффективный, потому что читая я не запоминаю и тем более не написав код я вообще не понимаю о чем написано в книге.
У меня огромный опыт написания софта на Делфи, даже коммерческого, я его писал и продавал. При этом было много книг, в которые заглядывал вместо гугла, сейчас есть гугл, читать нет смысла. Я на питоне писал примерно месяц, написал, пользовался софтом. Было это лет 3-5 назад. Сейчас я уверен не напишу и строчки, нужно опять читать и смотреть код.
При этом, как сами понимаете - я не становлюсь профессиональнее в программировании, но у меня и нет такой потребности. Поэтому для моих локальных задач такой подход вполне годится.
Я 90% кода новой программы пишу копируя код из прошлой программы, я не помню как пишется та или иная команда, исключениями являются if, for, остальное только копи-паст. Ну и гугл.
0
Эксперт .NET
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,617
17.12.2018, 13:55 22
Цитата Сообщение от belalugoci Посмотреть сообщение
Только те что могут пригодиться. Какие именно - узнаю по ходу пьесы.
Особенность "базовых вещей" (азов) как раз в том, что они нужны всегда, ибо вы с ними сталкивается сразу же. Как с теми же ссылочными типами. Без малейшего понимания тех же ссылочных типов, вы даже с простейшим случаем использования массива не справились без подсказки извне. Это, конечно, дело ваше, методом тыка работать, или более-менее уверенно продвигаться в решении задачи, но я бы очень скоро устал как слепой палочкой тыкать в пространство)

Цитата Сообщение от belalugoci Посмотреть сообщение
Как раз для меня метод тука самый эффективный, потому что читая я не запоминаю и тем более не написав код я вообще не понимаю о чем написано в книге.
Эффективный подход - читать и практиковаться одновременно, а не впадать в крайности (или только читать, или сразу за клавиатуру хвататься).

Ладно, не будем демагогию разводить. Не хотите основательные структурированные знания получать - ладно. Я с вами своей точкой зрения на это поделился: специалистом с таким подходом не стать.
0
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
18.12.2018, 05:13  [ТС] 23
Цитата Сообщение от Usaga Посмотреть сообщение
Эффективный подход - читать и практиковаться одновременно
в книжке 700 страниц. сделал первый урок - молодец, а 88 урок я сделаю через 3-4 месяца начисто забыв что было в первом уроке.

Цитата Сообщение от Usaga Посмотреть сообщение
Не хотите основательные структурированные знания получать - ладно
Вы неверное смотрите на ситуацию, я не не хочу, я просто не в состоянии их получать таким способом - особенность такая, багофича.

Цитата Сообщение от Usaga Посмотреть сообщение
специалистом с таким подходом не стать.
И нет цели такой.
0
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
18.12.2018, 07:49 24
belalugoci, можно сделать
C#
1
2
3
List<List<string>> strlist = new List<List<string>>()
var liststr = new List<string>(){"1","2","..."};
strlist.add(liststr);
ну и так далее. таким образом вам не надо подгонять размерность массива.
1
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
18.12.2018, 09:22  [ТС] 25
Цитата Сообщение от Andreyip Посмотреть сообщение
таким образом вам не надо подгонять размерность массива
приму к сведению. но нет задачи делать что-то динамическое по столбцам, достаточно Add для строк.
0
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
18.12.2018, 11:00 26
belalugoci, в случае с массивами вам нужно либо сразу инициализировать длину, либо ее изменять методом resize перед вставкой. Тут же происходит все динамически.

Добавлено через 8 минут
belalugoci, А вообще то что вы написали очень похоже на csv файл в котором обязательно есть шапка. если так то лучше сразу описать класс в котором делать атрибут заголовка. И уже по этому заголовку делать парсинг записи.
Далее уже будете работать с листом объектов.
0
Эксперт .NET
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,617
18.12.2018, 11:11 27
Andreyip, если количество элементов заранее, то какие проблемы использовать массив?
0
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
18.12.2018, 11:24  [ТС] 28
Цитата Сообщение от Andreyip Посмотреть сообщение
в случае с массивами вам нужно либо сразу инициализировать длину, либо ее изменять методом resize перед вставкой
В теме написано "Но есть интерес загрузить данные из файла, где в одной строке будет 10 чисел", то есть int[10]. В любом случае ваш вариант останется в теме и при необходимости я его использую как шаблон. Спасибо.

Цитата Сообщение от Andreyip Посмотреть сообщение
А вообще то что вы написали очень похоже на csv файл в котором обязательно есть шапка. если так то лучше сразу описать класс в котором делать атрибут заголовка. И уже по этому заголовку делать парсинг записи.
Далее уже будете работать с листом объектов.
Почти так, но я думаю что
C#
1
2
var nums = new List<int[]>();
nums.Add(new int[10]);
будет достаточно.
0
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
18.12.2018, 11:26 29
Usaga, Если количество элементов известно значит и известно что это за элементы и какого типа, а значит нет смысла использовать массив, лучше сразу описать нормально объект. А то очень часто вижу что люди приходят в C# с javascript или с php и начинают все пихать в массивы как изначально привыкли вместо того чтобы описать нормально модель данных.
0
Эксперт .NET
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,617
18.12.2018, 11:45 30
Andreyip, да, объект собственный (типизированное представление) было бы наиболее правильным. Но не всегда это доступно. Я же имел в виду другой момент: если нам количество элементов можно узнать заранее (на этапе исполнения), то можно использовать массивы, а не List<T>. Чутка меньше памяти уйдёт.

Но для ТС-а, судя по всему, вообще разницы никакой нет, лишь бы работало.
0
-338 / 245 / 26
Регистрация: 01.06.2018
Сообщений: 3,137
18.12.2018, 11:52  [ТС] 31
Цитата Сообщение от Andreyip Посмотреть сообщение
а значит нет смысла использовать массив, лучше сразу описать нормально объект
не мне с вами спорить, меня тут не любят и не любят мой подход к разработке (он странный и очень ненормальный), но мне кажется простота работы с данными и время разработки - важные критерии и если нужно только прочитать файлик и посчитать данные, то разрабатывать "нормальный объект" - это перебор.
Опять же я не силен в том что именно быстрее работает и меньше занимает оперативной памяти, но объекты (имхо) будут работать медленее, нет? Не зря вот указали на unsafe вариант при работе через указатели где выигрыш в скорости в разы.

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Но для ТС-а, судя по всему, вообще разницы никакой нет, лишь бы работало.
Разница есть на этапе оптимизации, если программа проживёт достаточно долго чтобы до такого добраться. Но в целом вы верно понимаете моё программерское кредо.

Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
то можно использовать массивы
а как использовать массивы в такой конструкции? и не будет ли resize выделять новую кучу и тупо копировать существующий массив в новую память? не будет ли это накладно?
0
Эксперт .NET
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,617
18.12.2018, 13:12 32
Цитата Сообщение от belalugoci Посмотреть сообщение
а как использовать массивы в такой конструкции? и не будет ли resize выделять новую кучу и тупо копировать существующий массив в новую память? не будет ли это накладно?
Массив имеет смысл использовать, когда вы можете сразу определить количество элементов, что в нём должны храниться. Тогда вы можете сразу создать массив нужного размера. В противном случае, придётся выбрать другую структура данных, расширяемую.

Цитата Сообщение от belalugoci Посмотреть сообщение
и не будет ли resize выделять новую кучу
Упомянутый выше List<T> как раз основан на массиве, которые пересоздаётся с ростом количества данных. Так, что вручную массивами жонглируйте или через List<T> - разницы не будет. Просто List<T> уже написан и отлажен)
1
18.12.2018, 13:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2018, 13:12
Помогаю со студенческими работами здесь

Как правильно "прибиндить" объект коллекции List<string> к ListBox
Здравствуйте! Подскажите пожалуйста как правильно &quot;прибиндить&quot; к XAML разметке ListBox следующий...

Как воспользоваться set_intersection для двух list<string>
как воспользоваться функцией set_intersection для двух листов list&lt;string&gt; list1, list2; ?

Как правильно воспользоваться функцией if?
как правильно воспользоваться функцией if, если необходимо найти текст в ячейке и вывести один...

Как правильно воспользоваться шаблоном
Начал изучать C++ Вот есть два файла 1) #include &quot;stdafx.h&quot; #include &lt;iostream&gt;

[MFC] Как правильно воспользоваться радиобаттонами?
Пишу в MFC . Как правильно воспользоваться радиобаттонами. У меня есть переменная, которая...

Your content must have a ListView whose id attribute is 'android.R.id.list' - как правильно создать адаптор ?
Добрый день. Помогите разобраться с вопросом. Как правильно формировать адаптер для ListView?...


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

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