Как я изменяю содержание IDictionary, использующего LINQ (C# 3.0)

Я хочу упомянуть следующую опцию, которая конкретно не упоминается в PEP8, но отмечена в документации по словарю : «Когда ключи представляют собой простые строки, иногда проще определить пары, используя ключевые аргументы: "

my_dict = dict(
    foo = 1,
    bar = 2,
    baz = 3,
    ...
)

Это не решает вопрос отступа, однако.

5
задан Michael Meadows 4 June 2009 в 20:55
поделиться

3 ответа

Это не так ясно, как другие способы, но все должно работать нормально:

dictionary.Keys.ToList().ForEach(i => dictionary[i] = 0);

Моей другой альтернативой было бы создать метод расширения ForEach, подобный этому:

public static class MyExtensions
{
    public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
    {
        foreach (var item in items)
        {
            action(item);
        }
    }
}

Затем используйте его так:

dictionary.ForEach(kvp => kvp.Value = 0);

Это не сработает в этом случае, так как Value не может быть присвоено.

4
ответ дан 13 December 2019 в 22:14
поделиться

LINQ - это диалект запросов, а не напрямую язык мутации.

Чтобы изменить значения существующего словаря, foreach , вероятно, ваш друг:

foreach(int key in dictionary.Keys) {
    dictionary[key] = 1;
}
4
ответ дан 13 December 2019 в 22:14
поделиться
foreach (var item in dictionary.Keys)
    dictionary[item] = 1;

Интересно, а зачем вам это делать.

2
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: