Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 99
1

Dictionary<string, List<string>> получить все подэлементы

06.06.2017, 18:46. Просмотров 3581. Ответов 9

Всем привет! Есть словарь Dictionary<string, List<string>>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            Dictionary<string, List<string>> slov = new Dictionary<string, List<string>>();
            slov["1"] = new List<string>();
            slov["1"].Add("2");
            slov["1"].Add("3");
            slov["3"] = new List<string>();
            slov["3"].Add("a");
            slov["3"].Add("b");
            slov["3"].Add("4");
            slov["2"] = new List<string>();
            slov["2"].Add("c");
            slov["4"] = new List<string>();
            slov["4"].Add("d");
            slov["4"].Add("e");
            slov["2"].Add("f");
нужно получить под элементы т.е. a,b,c,d,e,f, а вот как это сделать я не могу понять

P.S. Спасибо всем большое!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2017, 18:46
Ответы с готовыми решениями:

Заполнить Dictionary<string, list<string>> из файла ресурсов
Всем привет! У меня появилась проблема, мне нужно заполнить Dictionary&lt;string, list&lt;string&gt;&gt; из...

List<Dictionary<string, string>> serialize to JObject
Добрый день. Еть следующая задачка. имеется список List&lt;Dictionary&lt;string, string&gt;&gt; data = new...

Прочитать содержимое List<Dictionary<string, string>>
Всем привет. Задача следующая: метод возвращает содержимое типа List&lt;Dictionary&lt;string, string&gt;&gt; и...

Сложный Dictionary<MyClass, Dictionary<List<MyClass2>, List<string>>> MyDictionary
Здравствуйте. Помогите plz реализовать обращения к словарю вида : Dictionary&lt;MyClass,...

9
Администратор
Эксперт .NET
12935 / 10546 / 4365
Регистрация: 17.03.2014
Сообщений: 21,259
Записей в блоге: 1
06.06.2017, 19:36 2
DeveloperZ,
C#
1
2
3
4
5
6
7
8
9
// Без LINQ
var all = new List<string>();
foreach (KeyValuePair<string,List<string>> kvp in slov)
{
    all.AddRange(kvp.Value);
}
 
// С LINQ
var all = slov.SelectMany(kvp => kvp.Value).ToList();
Цитата Сообщение от DeveloperZ Посмотреть сообщение
ужно получить под элементы т.е. a,b,c,d,e,f
А 2 и 3 куда пропали?
0
1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 99
06.06.2017, 20:23  [ТС] 3
Делаю так
C#
1
2
3
4
5
6
 var all = new List<string>();
            foreach (KeyValuePair<string, List<string>> kvp in slov)
            {
                all.AddRange(kvp.Value);
                Console.WriteLine(kvp.ToString());
            }
выводит только 1234, а мне только буквы нужны
0
Администратор
Эксперт .NET
12935 / 10546 / 4365
Регистрация: 17.03.2014
Сообщений: 21,259
Записей в блоге: 1
06.06.2017, 21:04 4
DeveloperZ, ну ты хоть немного думай что делаешь. Добавление идет в коллекцию all, а ты зачем-то выводишь переменную kvp которая представляет пару string-List<string>. Вывод нужно делать после цикла. Что касается "только букв", то это решается так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Без LINQ
var all = new List<string>();
foreach (KeyValuePair<string,List<string>> kvp in slov)
{
    foreach (string s in kvp.Value)
    {
        if (char.IsLetter(s[0]))
        {
            all.Add(s);
        }
    }
}
 
// С LINQ
var all = slov.SelectMany(kvp => kvp.Value).Where(s => char.IsLetter(s[0])).ToList();
0
1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 99
06.06.2017, 21:36  [ТС] 5
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
if (char.IsLetter(s[0]))
, а если будут все буквы без цифр и нужно будет найти под элементы, как тогда?

Спасибо!
0
Администратор
Эксперт .NET
12935 / 10546 / 4365
Регистрация: 17.03.2014
Сообщений: 21,259
Записей в блоге: 1
06.06.2017, 21:38 6
Цитата Сообщение от DeveloperZ Посмотреть сообщение
, а если будут все буквы без цифр и нужно будет найти под элементы, как тогда?
Не понял о чем ты.
0
1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 99
06.06.2017, 22:00  [ТС] 7
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Не понял о чем ты.
Ну вот смотри у меня в словаре есть цифры 1,2,3,4 и буквы a,b,c,d,e,f, и вот эта проверка:
Цитата Сообщение от DeveloperZ Посмотреть сообщение
if (char.IsLetter(s[0]))
отсеивает цифры от букв, а как поступить если за место 1,2,3,4 будет q,w,t,r и под элементы останутся те-же a,b,c,d,e,f, как поступить тогда, как мне найти эти под элементы (a,b,c,d,e,f)?

Спасибо)
0
Special user
35 / 35 / 16
Регистрация: 07.10.2013
Сообщений: 121
06.06.2017, 22:14 8
DeveloperZ, чем отличается набор (a, b, c, d, e, f) от набора (q, w, r, t), не учитывая очевидное для НАС?
Мне кажется, OwenGlendower, всё понятно написал, и статический метод IsLetter(var arg) говорит сам за себя, не так ли?
Цитата Сообщение от DeveloperZ Посмотреть сообщение
отсеивает цифры от букв, а как поступить если за место 1,2,3,4 будет q,w,t,r
Создать необходимый набор, который вам необходимо отсеять, и делать проверку на присутствие каждого элемента словаря с этим набором.
0
1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 99
06.06.2017, 22:19  [ТС] 9
Извините меня но я немного не понял, вот заменим словарь:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dictionary<string, List<string>> someData = new Dictionary<string, List<string>>();
            someData["Петр Иванович"] = new List<string>();
            someData["Петр Иванович"].Add("Анна Ивановна");
            someData["Петр Иванович"].Add("Максим Иванович");
            someData["Максим Иванович"] = new List<string>();
            someData["Максим Иванович"].Add("Коля");
            someData["Максим Иванович"].Add("Миша");
            someData["Максим Иванович"].Add("Николай Максимович");
            someData["Анна Ивановна"] = new List<string>();
            someData["Анна Ивановна"].Add("Артем");
            someData["Николай Максимович"] = new List<string>();
            someData["Николай Максимович"].Add("Катя");
            someData["Николай Максимович"].Add("Маша");
            someData["Анна Ивановна"].Add("Саша");
Как из этого словаря выдернуть (Коля, Миша, Артем, Катя, Маша, Саша)? Только за место этих имен могут стоять совсем другие, еще раз извините за мою тупость)

P.S. Спасибо
0
Администратор
Эксперт .NET
12935 / 10546 / 4365
Регистрация: 17.03.2014
Сообщений: 21,259
Записей в блоге: 1
06.06.2017, 22:29 10
DeveloperZ, вырази сначала словами отличие между этими строками, а затем вырази слова кодом по аналогии с ранее приведенными примерами.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2017, 22:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обработать словарь типа Dictionary<string, string> и на выходе получить ступенчатый массив
Всем здравствуйте! Я только начинаю познавать программирование (около месяца).Поэтому прошу...

Получить значение value (string) из Dictionary<int, string>
Имеем Dictionary&lt;int, string&gt; pos = new Dictionary&lt;int, string&gt;; pos.Add(1,&quot;A&quot;);...

Как архивировать Dictionary<string, Dictionary<string, decimal[,]>>
Программа периодически создает Dictionary&lt;string, Dictionary&lt;string, decimal&gt;&gt; большого размера....

Dictionary<string, List<CD>> Удаление из списка
Здравствуйте! Помогите пожалуйста! Проблема заключается в том, что мне не удается из List&lt;CD&gt;...

Сериализация для Dictionary<DateTime, List<string>>
как сериализовать в XML Dictionary&lt;DateTime, List&lt;string&gt;&gt;?

Работа со словарём в цикле Dictionary<int, List<string>>
Hi! Есть словарик. private static Dictionary&lt;int, List&lt;string&gt;&gt; test = new Dictionary&lt;int,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.