Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71

Конвертировать один элемент из List<List<Class>> в list и string

07.11.2018, 10:32. Показов 6762. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно перевести один выбранный элемент из List<List<Data>> myList в list и string?
Например, myList[0].
Сейчас я могу с помощью цикла поместить все элементы в список и потом уже работать с ним. Можно ли как-то выбрать только один элемент бе итерации?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication2
{
    class Person
    {
        public string Name;
        public string Surname;
 
        public Person(string name, string surname)
        {
            Name = name;
            Surname = surname;
        }
 
        public override string ToString()
        {
            return ((Name + " ") ?? "") + (Surname ?? "");
        }
 
    }
 
    /// <summary>
    /// Подразделение
    /// </summary>
    class Data
    {
        /// <summary>
        /// Название подразделения
        /// </summary>
        public string Num;
        /// <summary>
        /// Список сотрудников подразделения
        /// </summary>
        public List<Person> Persons;
 
        public Data(string num, List<Person> person)
        {
            Num = num;
            Persons = person;
        }
 
        public override string ToString()
        {
            var s = Num + Environment.NewLine;
            foreach (var item in Persons)
            {
                s += item.ToString() + Environment.NewLine;
            }
            return s;
        }
    }
 
 
    class Program
    {
        static void Main(string[] args)
        {
            // Список предприятий одного владельца
            List<List<Data>> myList = new List<List<Data>>();
 
            // Список для одного подразделения
            List<Person> person = new List<Person>();
            // Сотрудники в списке подразделения
            person.Add(new Person("John", "Smith"));
 
            List<string> person1 = new List<string>();
            string[] str = null;
 
 
            // В список предприятий одного владельца добавить предприятие
            myList.Add(new List<Data>() { new Data("dc", person) });
            myList.Add(new List<Data>() { new Data("dc1", person) });
            myList.Add(new List<Data>() { new Data("dc2", person) });
 
            foreach (List<Data> subList in myList) // Для каждого предприятия в списке предприятий
            {
                Console.WriteLine("Предприятие:");
                foreach (Data data in subList) // Для каждого подразделения в предприятии
                {                   
                    person1.Add(data.ToString());
                    Console.WriteLine(data);
                }
            }
         
            Console.WriteLine(person1[2]);
            
 
        }
 
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2018, 10:32
Ответы с готовыми решениями:

Конвертировать list<object> в list<string>
Здравствуйте форумчане. Возможно ли быстро конвертировать list&lt;object&gt; в list&lt;string&gt; и обратно. И ещё, возможно ли динамически задавать...

Необходимо создать dll в которой буду обрабатывать list<list<string>>
Необходимо создать dll в которой буду обрабатывать list&lt;list&lt;string&gt;&gt; как объявить методы класса чтобы я задавал на вход экземпляр...

List<string> или все же List<StringBuilder>, что лучше использовать?
Добрый день, хочется узнать с точки зрения производительности что подходит лучше в данном случае. Есть List&lt;List&lt;T&gt;&gt;, в...

29
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 11:09
Цитата Сообщение от ivret Посмотреть сообщение
Сейчас я могу с помощью цикла поместить все элементы в список и потом уже работать с ним. Можно ли как-то выбрать только один элемент без итерации?
Цикл у Вас по любому останется, так как есть вывод в консоль. Если бы его не было можно было записать Ваше преобразование так
C#
1
2
person1=myList.SelectMany (subList => subList.Select(data=>data.ToString()))
                       .ToList()
Добавлено через 3 минуты
Что касается выбора, то да - это можно, но не понятно из Вашего предложения что Вы хотите выбрать. Вы хотите Выбрать предприятие, отдел? По какому признаку? Более конкретно напишите, что Вам нужно. Можете написать несколько вариантов.
0
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 11:17  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что касается выбора, то да - это можно, но не понятно из Вашего предложения что Вы хотите выбрать. Вы хотите Выбрать предприятие, отдел? По какому признаку? Более конкретно напишите, что Вам нужно. Можете написать несколько вариантов.
Хочу полностью выбрать одну запись. Например, первый список в списке это

dc
John Smith

Мне нужно это первести в строку " dc, John Smith".
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 11:25
ivret,
C#
1
person1=myList.SelectMany(subList => string.Join(", ", subList)).ToList()
Не знаю верно или нет, просто копировал вариант от Элд Хасп
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 11:36
Цитата Сообщение от ivret Посмотреть сообщение
Хочу полностью выбрать одну запись. Например, первый список в списке это
Как выбрать? По какому критерию?
У Вас список предприятий, в них списки подразделений, в них список людей. Чтобы выбрать конкретного человека, надо указать данные по которым его искать.
Допустим, надо найти на каком предприятии и в каком отделе Person с заданными Name и Surname.
Или, найти первого Person в списке отдела с заданным Num на предприятии с заданным индексом.
Кстати, у Вас неверно организован список предприятий. Вы храните его только в виде списка подразделений и у Вас есть только его индекс. Если список изменится (допустим, будет сортировка) Вы потеряете связность списка. Введите дополнительный класс для предприятия в котором кроме списка подразделений будет идентификатор и дополнительная информация о нём: код-идентификатор, полное название, сокращённое, имя директора, телефон и т.п. Это облегчит работу с этим списком.

Добавлено через 8 минут
Цитата Сообщение от EveKS Посмотреть сообщение
Не знаю верно или нет, просто копировал вариант от Элд Хасп
Вывод ToString даёт иной вид. Посмотрите переопределение ToString в классе Data
0
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 11:41  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Как выбрать? По какому критерию?
По индексу. myList[0].
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 11:45
Лучший ответ Сообщение было отмечено ivret как решение

Решение

Цитата Сообщение от ivret Посмотреть сообщение
По индексу. myList[0].
var person = myList[0][0].Persons[0].ToString(); В нулевом предприятии, нулевой отдел, нулевой человек в формате возвращаемом методом ToString
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 11:47
Тогда ему нужно переопределить его ToString с
C#
1
2
3
4
5
6
            var s = Num + Environment.NewLine;
            foreach (var item in Persons)
            {
                s += item.ToString() + Environment.NewLine;
            }
            return s;
на
C#
1
2
3
4
5
            var s = Num + Environment.NewLine;
 
            s += string.Join(", ", Persons.Select(person => person.ToString()))
 
            return s;
И подумать о StringBuilder
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 11:48
Цитата Сообщение от EveKS Посмотреть сообщение
Тогда ему нужно переопределить его ToString с
Я думаю ему многое что нужно......
Но ответы по мере поступления задач.
1
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 11:50
А если dc, John Smith это Num + person, то
C#
1
var s = Num + ", "
И сделать то что нужно с Persons

Добавлено через 2 минуты
Элд Хасп, я сюда захожу чтоб отвлечься от своих задач, так что, парой - даже не читаю написанное . Просто забить голову чем-то другим. Особенно когда начинаю понимать, что автор сам не знает что хочет
0
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 11:53  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
person1=myList.SelectMany (subList => subList.Select(data=>data.ToString()))
* * * * * * * * * * * *.ToList()
Пишет List<List<Data>>" не содержит определения для "SelectMany" и не удалось найти метод расширения "SelectMany", принимающий тип "List<List<Data>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 11:57
Цитата Сообщение от ivret Посмотреть сообщение
Пишет List<List<Data>>" не содержит определения для "SelectMany" и не удалось найти метод расширения "SelectMany", принимающий тип "List<List<Data>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Писал здесь. Сейчас загружу в VS - проверю.
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 11:59
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от ivret Посмотреть сообщение
C#
1
2
using System;
using System.Collections.Generic;
Цитата Сообщение от ivret Посмотреть сообщение
Пишет List<List<Data>>" не содержит определения для "SelectMany" и не удалось найти метод расширения "SelectMany", принимающий тип "List<List<Data>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
C#
1
2
3
using System;
using System.Linq;
using System.Collections.Generic;
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 12:32
Цитата Сообщение от ivret Посмотреть сообщение
Пишет List<List<Data>>" не содержит определения для "SelectMany" и не удалось найти метод расширения "SelectMany", принимающий тип "List<List<Data>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Эту проблему пост EveKS решил?
Ещё остались какие-то проблемы?
0
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 12:36  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Эту проблему пост EveKS решил?
Ещё остались какие-то проблемы?
Ещё один вопрос. Как-нибудь можно отсюда вывести только Surname или Name?

C#
1
var person = myList[0][0].Persons[0].ToString();
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 12:40
Лучший ответ Сообщение было отмечено ivret как решение

Решение

Цитата Сообщение от ivret Посмотреть сообщение
Ещё один вопрос. Как-нибудь можно отсюда вывести только Surname или Name?

Не по теме:

Ужс... Книжку почитать? Вечера хватит, думаю, чтоб понять такое


C#
1
2
var surname = myList[0][0].Persons[0].Surname ;
var name= myList[0][0].Persons[0].Name;
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 13:12
Цитата Сообщение от ivret Посмотреть сообщение
Ещё один вопрос. Как-нибудь можно отсюда вывести только Surname или Name?
Имейте ввиду, обращение к элементам массива (в том числе списочного типа List) по индексу чревато ошибками времени исполнения. Без явной необходимости такого лучше не делать. А если приходится, то надо проверять массив на существование и на соответствие индекса размеру массива.
Так как, в массиве у Вас объекты, то лучше их извлекать по проверке на свойства.
1
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 13:22  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Имейте ввиду, обращение к элементам массива (в том числе списочного типа List) по индексу чревато ошибками времени исполнения. Без явной необходимости такого лучше не делать. А если приходится, то надо проверять массив на существование и на соответствие индекса размеру массива.
Так как, в массиве у Вас объекты, то лучше их извлекать по проверке на свойства.
Мне так тяжело понять. Если мне нужно их извлечь, то как это правильно сделать и как их проверить их на свойства? Можно пример?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16113 / 11234 / 2887
Регистрация: 21.04.2018
Сообщений: 33,035
Записей в блоге: 2
07.11.2018, 13:48
Цитата Сообщение от ivret Посмотреть сообщение
Мне так тяжело понять. Если мне нужно их извлечь, то как это правильно сделать и как их проверить их на свойства? Можно пример?
Для предприятия не получится, так как у Вас нет такого класса. Объявите его - допустим, с название Company. Будет проще.

Примеры для текущего кода.
Ищем на нулевом и первом предприятиях отдел "dc1"
C#
1
2
var data0 = myList[0].FirstOrDefault(dt => dt.Num == "dc1"); // Вернёт null
var data1 = myList[1].FirstOrDefault(dt => dt.Num == "dc1"); // Вернёт отдел "dc1"
Получаем первое в списке предприятие на котором есть отдел "dc1"
C#
1
var сompany = myList.FirstOrDefault(comp => comp.FirstOrDefault(dt => dt.Num == "dc1") != null);
Создаём список (перечислитель) предприятий на которых есть отдел "dc1"
C#
1
var listСompany = myList.Where(comp => comp.FirstOrDefault(dt => dt.Num == "dc1") != null);
Добавлено через 4 минуты
Во все свои классы добавьте дополнительное свойство string ID - это будет идентификатор - уникальное поле по которому однозначно можно идентифицировать объект.
1
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 13:57  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ищем на нулевом и первом предприятиях отдел "dc1"
Спасибо, теперь понятно.
И последний вопрос.
Сейчас искал информацию в интернете и ничего не нашёл. Везде только как вывести целый список.
Мне опять же надо вывести элемент по индексу, но теперь в список.


C#
1
person1=myList.SelectMany (subList => subList.Select(data=>data.ToString())).ToList()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2018, 13:57
Помогаю со студенческими работами здесь

Записать в файл по очереди элементы List<string> и List<char>
У меня есть List с string элементами и есть List с char элементами. Как сделать чтобы у файл записывались последователь сначало string...

Сортировка двумерного List<List<string>>, по 1-ой строке, чтобы элементы 2-ой строки передвинулись в соответствии с 1-ой
Дан двумерный массив List&lt;List&lt;string&gt;&gt; , состоящий из двух строк, как его отсортировать по первой строке, чтобы элементы второй строки...

Что предпочтительней в плане быстродействия и работы с памятью: List<List<string>> - new или .Clear()
что предпочтительней в плане быстродействия и работы с памятью создать в цикле new List&lt;List&lt;string&gt;&gt;() и использовать его,...

Разбить строки на символы и поместить их в List<List<string>>
Есть несколько строк, например, word1 word2 word3 но их может быть больше. Нужно разбить и их на буквы и поместить в...

Как достать значение из List<List<string>>
Есть JSON в котором лист в листе using System; using Newtonsoft.Json; using System.Collections.Generic; //using...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru