辞書のキーと値を逆にしたいと思います。私はソース辞書Dictionary<int, string>
から、私はDictionary<string, List<int>>
を取得したいと思います。値は異なるキーのもとで複数回ソース辞書に入れることができるので、List<int>
があります。辞書のキーと値の逆順
例:
{
"A": [1,2,3]
"B": [4,5]
"C": [6]
"D": [7]
}
助けをありがとう:
{
1: "A"
2: "A"
3: "A"
4: "B"
5: "B"
6: "C"
7: "D"
}
はに変換します。
EDIT:
OK、私はこのアルゴリズムについて少し理解することができた皆さんからの助けを借りて。 私は2つの可能な解決策を見ており、その結果が同じであるように見えますが、実際の違いは何か分かりません。
パフォーマンスに問題はありますか?
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
var byGroupBy = actions.GroupBy(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
EDIT 2:
私はちょうど
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
を使用して終了し、私はそれが、この単純なことだろうと予想しませんでした。 ありがとうございます。
var res = dict
.GroupBy(p => p.Value)
.ToDictionary(g => g.Key, g => g.Select(pp => pp.Key).ToList());
まず、あなたがグループ値によって:
あなたが作成しようとしています辞書からの検索?これが当てはまる場合、ToLookup()拡張メソッドはあなたの友人です。 – Baldrick
@B ...私はそれを理解しようとしましたが、すべてのパラメータとオーバーロードでGroupByメソッドに頭を下げることができませんでした。 – sidon
'var byLookup = actions.ToLookup(pair => pair.Value、pair => pair.Key)'だけで十分ですが、ToDictionaryを呼び出す必要はありません。 –