1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
1

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

07.11.2018, 10:32. Показов 5481. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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<string> и List<char>
У меня есть List с string элементами и есть List с char элементами. Как сделать чтобы у файл...

29
Модератор
Эксперт .NET
15054 / 10279 / 2709
Регистрация: 21.04.2018
Сообщений: 30,509
Записей в блоге: 2
07.11.2018, 11:09 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что касается выбора, то да - это можно, но не понятно из Вашего предложения что Вы хотите выбрать. Вы хотите Выбрать предприятие, отдел? По какому признаку? Более конкретно напишите, что Вам нужно. Можете написать несколько вариантов.
Хочу полностью выбрать одну запись. Например, первый список в списке это

dc
John Smith

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

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

Решение

Цитата Сообщение от ivret Посмотреть сообщение
По индексу. myList[0].
var person = myList[0][0].Persons[0].ToString(); В нулевом предприятии, нулевой отдел, нулевой человек в формате возвращаемом методом ToString
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 11:47 8
Тогда ему нужно переопределить его 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
15054 / 10279 / 2709
Регистрация: 21.04.2018
Сообщений: 30,509
Записей в блоге: 2
07.11.2018, 11:48 9
Цитата Сообщение от EveKS Посмотреть сообщение
Тогда ему нужно переопределить его ToString с
Я думаю ему многое что нужно......
Но ответы по мере поступления задач.
1
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 11:50 10
А если 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  [ТС] 11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
person1=myList.SelectMany (subList => subList.Select(data=>data.ToString()))
* * * * * * * * * * * *.ToList()
Пишет List<List<Data>>" не содержит определения для "SelectMany" и не удалось найти метод расширения "SelectMany", принимающий тип "List<List<Data>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
0
Модератор
Эксперт .NET
15054 / 10279 / 2709
Регистрация: 21.04.2018
Сообщений: 30,509
Записей в блоге: 2
07.11.2018, 11:57 12
Цитата Сообщение от ivret Посмотреть сообщение
Пишет List<List<Data>>" не содержит определения для "SelectMany" и не удалось найти метод расширения "SelectMany", принимающий тип "List<List<Data>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Писал здесь. Сейчас загружу в VS - проверю.
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 11:59 13
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от 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
15054 / 10279 / 2709
Регистрация: 21.04.2018
Сообщений: 30,509
Записей в блоге: 2
07.11.2018, 12:32 14
Цитата Сообщение от ivret Посмотреть сообщение
Пишет List<List<Data>>" не содержит определения для "SelectMany" и не удалось найти метод расширения "SelectMany", принимающий тип "List<List<Data>>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Эту проблему пост EveKS решил?
Ещё остались какие-то проблемы?
0
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 12:36  [ТС] 15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Эту проблему пост EveKS решил?
Ещё остались какие-то проблемы?
Ещё один вопрос. Как-нибудь можно отсюда вывести только Surname или Name?

C#
1
var person = myList[0][0].Persons[0].ToString();
0
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
07.11.2018, 12:40 16
Лучший ответ Сообщение было отмечено 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
15054 / 10279 / 2709
Регистрация: 21.04.2018
Сообщений: 30,509
Записей в блоге: 2
07.11.2018, 13:12 17
Цитата Сообщение от ivret Посмотреть сообщение
Ещё один вопрос. Как-нибудь можно отсюда вывести только Surname или Name?
Имейте ввиду, обращение к элементам массива (в том числе списочного типа List) по индексу чревато ошибками времени исполнения. Без явной необходимости такого лучше не делать. А если приходится, то надо проверять массив на существование и на соответствие индекса размеру массива.
Так как, в массиве у Вас объекты, то лучше их извлекать по проверке на свойства.
1
1 / 1 / 0
Регистрация: 18.02.2016
Сообщений: 71
07.11.2018, 13:22  [ТС] 18
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Имейте ввиду, обращение к элементам массива (в том числе списочного типа List) по индексу чревато ошибками времени исполнения. Без явной необходимости такого лучше не делать. А если приходится, то надо проверять массив на существование и на соответствие индекса размеру массива.
Так как, в массиве у Вас объекты, то лучше их извлекать по проверке на свойства.
Мне так тяжело понять. Если мне нужно их извлечь, то как это правильно сделать и как их проверить их на свойства? Можно пример?
0
Модератор
Эксперт .NET
15054 / 10279 / 2709
Регистрация: 21.04.2018
Сообщений: 30,509
Записей в блоге: 2
07.11.2018, 13:48 19
Цитата Сообщение от 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  [ТС] 20
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ищем на нулевом и первом предприятиях отдел "dc1"
Спасибо, теперь понятно.
И последний вопрос.
Сейчас искал информацию в интернете и ничего не нашёл. Везде только как вывести целый список.
Мне опять же надо вывести элемент по индексу, но теперь в список.


C#
1
person1=myList.SelectMany (subList => subList.Select(data=>data.ToString())).ToList()
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2018, 13:57
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru