簡體   English   中英

C#LINQ獲取字典的第一個列表項 <string, List<object> &gt;

[英]C# LINQ get first list items of a dictionary<string, List<object>>

我有一個列表字典,我想獲取字典中每個列表的第一個元素的列表。 基本上:

    Dictionary<string, List<object>> dico = new Dictionary<string, List<Object>>();

    // fill data...

   List<object> list = new List<Object>();
   foreach(var value in dico.Values)
   {
        list.Add(value.ElementAt(0));
   }

可以用LINQ完成。

非常感謝。

Dictionary實現IEnumerable<KeyValuePair>因此您可以將每個值投影到所需的值,然后轉換為列表:

var list = dico.Select(p => p.Value[0]).ToList();

如果您擔心List為空或缺少( null )列表,則可以保護投影:

var list = dico.Select(p => p.Value?.FirstOrDefault()).ToList();

PS我以為ElementAtOrDefaultList的方法,或者至少對List有特殊情況,但事實並非如此。 我想知道為什么.Net使用類型轉換來檢查List而不是在已知靜態類型時使用特殊情況:

public static T ElementAtOrDefault<T>(this List<T> src, int index) => src.Count > index ? src[index] : default(T);

快速測試表明擴展方法在List上快20倍。

暫無
暫無

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

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