Как удалить значение на основе ключа из словаря <uint, List <uint>>? - PullRequest
0 голосов
/ 15 ноября 2018

Это сообщение об ошибке, которое я получаю с переменной k. В моем коде есть словарь в формате Dictionary<uint, List<uint>>.Я хочу перебрать словарь и удалить элементы на основе значения , а не ключа изначально.Затем я хочу удалить ключ , как только все значения в ключе будут удалены.Я не уверен, как это сделать.

Я использовал цикл foreach для итерации, но, похоже, он не работает.Может ли кто-нибудь дать мне руководство с псевдокодом о том, как это сделать.

У k есть проблемы.

Код, который я использовал.

List<uint> todel = MyList.Keys.Where(k => k.Contains(Idx)).ToList();
todel.ForEach(k => MyList.Remove(k));

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Полагаю, это проблемная строка:

List<uint> todel = MyList.Keys.Where(k => k.Contains(Idx)).ToList();

Попробуйте что-то вроде этого

List<uint> todel = MyList.Keys.Where(k => k == Idx).ToList();

k - это не список, это тип uint.

Если вы хотите удалить записи, значение которых содержит Idx, попробуйте это

List<uint> todel = MyList.Where(k => k.Value.Contains(Idx)).Select(x => x.Key).ToList();
0 голосов
/ 15 ноября 2018

"Я хочу перебрать словарь и удалить элементы на основе значения, а не ключа изначально. Затем я хочу удалить ключ после удаления всех значений в ключе."

Вот один из способов сделать это, если я правильно понимаю:

Dictionary<int, List<int>> source = new Dictionary<int, List<int>>();
source.Add(1, new List<int> { 1, 2, 3, 4, 5});
source.Add(2, new List<int> { 3, 4, 5, 6, 7});
source.Add(3, new List<int> { 6, 7, 8, 9, 10});

foreach (var key in source.Keys.ToList()) // ToList forces a copy so we're not modifying the collection
{
    source[key].RemoveAll(v => v < 6); // or any other criterion

    if (!source[key].Any())
    {
        source.Remove(key);
    }
}

Console.WriteLine("Key count: " + source.Keys.Count());
foreach (var key in source.Keys)
{
    Console.WriteLine("Key: " + key + " Count: " + source[key].Count());
}

Вывод:

Подсчет ключей: 2
Ключ: 2 Количество: 2
Ключ: 3 Количество: 5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...