5

C# 3.0 (Linq、Linq 拡張機能) を使用して IDictionary の内容を変更するにはどうすればよいですか?

var enumerable = new int [] { 1, 2};
var dictionary = enumerable.ToDictionary(a=>a,a=>0);
//some code
//now I want to change all values to 1 without recreating the dictionary
//how it is done?
4

3 に答える 3

4

これは他の方法ほど明確ではありませんが、問題なく動作するはずです。

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);

ただし、値を割り当てることができないため、この場合は機能しません。

于 2009-06-04T21:17:31.360 に答える
4

LINQ はクエリの方言であり、直接的にはミューテーション言語ではありません。

既存の辞書の値を変更するにforeachは、おそらくあなたの友人です:

foreach(int key in dictionary.Keys) {
    dictionary[key] = 1;
}
于 2009-06-04T20:52:35.450 に答える
2
foreach (var item in dictionary.Keys)
    dictionary[item] = 1;

しかし、なぜそのようなことをする必要があるのだろうか。

于 2009-06-04T20:53:16.743 に答える