JoeSmith3100
@JoeSmith3100
Начинающий программист C#

Как решить поставленную задачу на словари?

Не могу понять как без того, чтоб окончательно изуродовать код, изменять приуроченные к словарю значения вида "List<string>" учитывая что их может быть неограниченное количество, а цель заключается в том, чтобы к конкретному значению словаря уже указанного вида можно было обратиться по привязанному к нему ключу для добавления новых элементов в целевой список

Пытался решить проблему путём добавления "List<List<string>>" но получалась ахинея, которая конечно не работала, добавить массив списков так же не получится, потому что необходимо заполнять словарь списками по мере поступления информации

Данный код способен добавить лишь один элемент в нужный список и списки по сути не имеют даже какого либо имени

private static Dictionary<string, List<string>> OptimizeContacts(List<string> contacts)
{
    var dictionary = new Dictionary<string, List<string>>();
	foreach (var curLine in contacts) {
		var indexOfColon = curLine.Split(':');
		if (indexOfColon[0].Length != 1) 
		{
			if (!dictionary.ContainsKey(curLine.Remove(2, curLine.Length - 2))) {
				dictionary.Add(curLine.Remove(2, curLine.Length - 2), new List<string>() {curLine});
			}
			else {
				
			}
		}
		else
		{
			if (!dictionary.ContainsKey(indexOfColon[0])) {
				dictionary.Add(indexOfColon[0], new List<string>() {curLine});
			}
			else {
				
			}
		}
	}
	return dictionary;
}


P. S. Хотел бы отдельно попросить прощения у куратора тега c# Василия Банникова за излишнюю назойливость
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Я не до конца понял задачу, но вроде вот такой код работает:
using System;
using System.Collections.Generic;
using System.Text.Json;

var lines = new[]
{
    "1:a",
    "1:b",
    "2:c",
    "3:d",
    "3:x",
    "biba:boba:buba",
};
var result = ParseContacts(lines);
Console.WriteLine(JsonSerializer.Serialize(result, new JsonSerializerOptions(JsonSerializerDefaults.General)
{
    WriteIndented = true
}));

static Dictionary<string, List<string>> ParseContacts(IEnumerable<string> lines)
{
    var dict = new Dictionary<string, List<string>>();
    foreach (var line in lines)
    {
        var tokens = line.Split(':', 2);
        var id = tokens[0];
        var text = tokens[1];
        if (dict.ContainsKey(id))
            dict[id].Add(text);
        else
            dict[id] = new List<string> {text};
    }

    return dict;
}

Этот код выведет
{
  "1": [
    "a",
    "b"
  ],
  "2": [
    "c"
  ],
  "3": [
    "d",
    "x"
  ],
  "biba": [
    "boba:buba"
  ]
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Вы немного неправильно описываете задачу. Мне вот не понятно.
Допустим у вас есть набор строк

12:aaaaaa:DEADBEEF
14:aaaaab:DEADBEEF
15:aaaaac:DEADBEEF

Чему он соответствует в реальной жизни?
Организационной структуре с подчинением?
Тогда логично сделать древовидную структуру и уже в ней реализовать ветки.
В общем дополните описание. Скорее всего после этого вы и сами напишете более понятный и простой код.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы