[解決済み】C#で辞書をマージする
2022-03-23 07:41:59
質問
2つ以上の辞書をマージするのに最適な方法は何ですか?
Dictionary<T1,T2>
)をC#で作成することはできますか?
(LINQのような3.0の機能で結構です)。
という流れでメソッドシグネチャを考えています。
public static Dictionary<TKey,TValue>
Merge<TKey,TValue>(Dictionary<TKey,TValue>[] dictionaries);
または
public static Dictionary<TKey,TValue>
Merge<TKey,TValue>(IEnumerable<Dictionary<TKey,TValue>> dictionaries);
EDITです。 JaredParとJon Skeetからクールな解決策を得ましたが、私は重複したキーを処理するものを考えていました。衝突した場合、一貫している限り、どの値がdictに保存されるかは問題ではありません。
どのように解決するのですか?
これは、重複が発生した場合にどうしたいかによります。たとえば、次のようなことができます。
var result = dictionaries.SelectMany(dict => dict)
.ToDictionary(pair => pair.Key, pair => pair.Value);
重複するキーを取得した場合は例外が発生します。
EDIT: ToLookupを使用すると、キーごとに複数の値を持つことができるルックアップを得ることができます。あなたは できる で、それを辞書に変換する。
var result = dictionaries.SelectMany(dict => dict)
.ToLookup(pair => pair.Key, pair => pair.Value)
.ToDictionary(group => group.Key, group => group.First());
ちょっと醜いし、効率も悪いですが、コードの面では一番手っ取り早い方法だと思います。(確かに私はテストしていませんが)。
もちろん、自分でToDictionary2拡張メソッドを書くこともできます(もっといい名前ですが、今はそれを考える時間がありません)。重複するキーを上書き(または無視)するだけで、それほど難しいことではありません。重要なのは、(私の考えでは)
SelectMany
そして、辞書はそのキーと値のペアの反復処理をサポートしていることを理解する。
関連
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 辞書のリストをpandasのDataFrameに変換する
-
[解決済み] Pandas マージ入門
-
[解決済み] ネストされた辞書をきれいに印刷するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Python 3.6+で辞書は順番に並びますか?
-
[解決済み] 辞書の辞書をマージする方法は?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] なぜDictionaryにはAddRangeがないのですか?