[解決済み] C# List<string> から Dictionary<string, string> への変換
質問
これは奇妙なことに思えるかもしれませんが、それはさておき。
List<string>
から
Dictionary<string, string>
ここで、Dictionaryの各Key Value PairはListの各文字列と同じです。
List = string1, string2, string3
Dictionary = string1/string1, string2/string2, string3/string3
検索してみると、Stackoverflowだけでも文字通り何十もの逆方向の例があるのですが、この方法はないのです。
このようなことをする理由は、2つのサードパーツのコンポーネントがあり、それらを変更することは私の手には負えないからです。ひとつは、メールアドレスのリストを
List<string>
もう1つは、Toパラメータが
Dictionary<string, string>
. 辞書のキーはメールアドレスで、値は相手の本名です。しかし、本名はわからないが、メールアドレスに本名も設定すれば、まだ使える。したがって、なぜListを
Dictionary<string, string>
. この方法はいくらでもあります。A
foreach
辞書にkvpを追加するリスト上のループ。しかし、私は簡潔なコードが好きなので、一行で済む解決策はないものかと考えていました。
どのように解決するのですか?
これを試してみてください。
var res = list.ToDictionary(x => x, x => x);
最初のラムダはキーを選び、2番目のラムダは値を選びます。
このように、キーと異なる値を作って遊ぶこともできます。
var res = list.ToDictionary(x => x, x => string.Format("Val: {0}", x));
リストに重複がある場合は
Distinct()
のようにします。
var res = list.Distinct().ToDictionary(x => x, x => x);
EDIT
有効な理由についてのコメントですが、このような変換で有効な理由は、ある時点で、結果の辞書のキーと値が乖離することだと思います。例えば、最初に変換を行い、その後、いくつかの値を別のものに置き換えるような場合です。もし、キーと値が
常に
が同じになるようにする。
HashSet<String>
を使えば、あなたの状況にもっとフィットするはずです。
var res = new HashSet<string>(list);
if (res.Contains("string1")) ...
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] なぜList<T>を継承しないのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】「namespace」なのに「type」のように使われる。
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。