簡體   English   中英

C# 轉換列表<string>詞典<string, string></string,></string>

[英]C# Convert List<string> to Dictionary<string, string>

這似乎是一件奇怪的事情,但忽略了這一點,是否有一種簡潔的方法可以將List<string>轉換為Dictionary<string, string> ,其中 Dictionary 中的每個鍵值對只是 List 中的每個字符串。 IE

List = string1, string2, string3
Dictionary = string1/string1, string2/string2, string3/string3

我做了很多搜索,僅在 Stackoverflow 上就有幾十個相反方向的例子,但不是這樣。

這樣做的原因是我有兩個第三方組件,我無法更改它們。 一個以List<string>的形式返回電子郵件地址列表,另一個發送電子郵件,其中 To 參數是Dictionary<string, string> 字典的鍵是電子郵件地址,值是他們的真實姓名。 但是,我不知道真實姓名,但如果您也將真實姓名設置為電子郵件地址,它仍然有效。 因此,為什么我想將 List 轉換為Dictionary<string, string> 有很多方法可以做到這一點。 列表上的foreach循環將 kvp 添加到字典。 但我喜歡簡潔的代碼,想知道是否有單行解決方案。

試試這個:

var res = list.ToDictionary(x => x, x => x);

第一個 lambda 讓你選擇鍵,第二個讓你選擇值。

您可以使用它並使值與鍵不同,如下所示:

var res = list.ToDictionary(x => x, x => string.Format("Val: {0}", x));

如果您的列表包含重復項,請像這樣添加Distinct()

var res = list.Distinct().ToDictionary(x => x, x => x);

編輯要評論有效的原因,我認為對這樣的轉換有效的唯一原因是在某些時候,結果字典中的鍵和值會發生分歧。 例如,您將進行初始轉換,然后將某些值替換為其他值。 如果鍵和值始終相同,則HashSet<String>會更適合您的情況:

var res = new HashSet<string>(list);
if (res.Contains("string1")) ...

用這個:

var dict = list.ToDictionary(x => x);

有關詳細信息,請參閱MSDN

正如 Pranay 在評論中指出的那樣,如果一個項目多次存在於列表中,這將失敗。
根據您的具體要求,您可以使用var dict = list.Distinct().ToDictionary(x => x); 獲取不同項目的字典,或者您可以改用ToLookup

var dict = list.ToLookup(x => x);

這將返回一個ILookup<string, string> ,它與IDictionary<string, IEnumerable<string>>基本相同,因此您將擁有一個不同鍵的列表,每個字符串實例都在它下面。

編輯

另一種處理重復的方法是你可以這樣做

var dic = slist.Select((element, index)=> new{element,index} )
            .ToDictionary(ele=>ele.index.ToString(), ele=>ele.element);

要么


簡單的方法是

var res = list.ToDictionary(str => str, str=> str); 

但要確保沒有重復的字符串……否則上面的代碼對你不起作用

如果有字符串重復比這樣做更好

Dictionary<string,string> dic= new Dictionary<string,string> ();

    foreach(string s in Stringlist)
    {
       if(!dic.ContainsKey(s))
       {
        //  dic.Add( value to dictionary
      }
    }

通過使用ToDictionary

var dictionary = list.ToDictionary(s => s);

如果有可能重復任何字符串,請首先在列表上執行Distinct調用(以刪除重復項),或者使用允許每個鍵有多個值的ToLookup

您可以使用:

var dictionary = myList.ToDictionary(x => x);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM